home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / hires.s < prev    next >
Text File  |  1997-01-31  |  195KB  |  13,757 lines

  1.  
  2.  
  3.  
  4. CHEESEY equ 0
  5.  
  6. *************************************************
  7. * Stuff to do to get a C2P version:
  8. * Change copperlist
  9. * Change wall drawing
  10. * change floor drawing
  11. * change object drawing
  12. * change polygon drawing (ugh)
  13. * Write a palette generator program in AMOS
  14. * to provide a good 256 colour palette and
  15. * convert all graphics files specified
  16. * (possibly included in the game linker
  17. * program).
  18. * Possibly change the wall/floor/object
  19. * palettes to look nicer with more shades.
  20. * RE-implement stippling (if not present)
  21. * as it will look gorgeous now.
  22. *************************************************
  23.  
  24. ;MIDDLEX set 96
  25. ;RIGHTX set 191
  26. ;BOTTOMY set 160 
  27.  
  28. ;MIDDLEX set 96
  29. ;RIGHTX set 191
  30. ;BOTTOMY set 160
  31.  
  32. _break    macro
  33. ;    bkpt    \1
  34.     endm
  35.  
  36.  
  37. FILTER    macro
  38. ;    move.l    d0,-(sp)
  39. ;    move.l    #65000,d0
  40. ;.loop\@
  41. ;    bchg    #1,$bfe001
  42. ;    dbra    d0,.loop\@
  43. ;    move.l    (sp)+,d0
  44.     endm
  45.  
  46. BLACK    macro
  47.     move.w    #0,$dff180
  48.     endm
  49.  
  50. RED    macro
  51.     move.w    #$f00,$dff180
  52.     endm
  53.  
  54. FLASHER macro
  55. ;    movem.l    d1,-(sp)
  56. ;    move.w    #-1,d1
  57. ;
  58. ;loop3\@
  59. ;;    move.w    #\1,$dff180
  60. ;    nop
  61. ;    nop
  62. ;    move.w    #\2,$dff180
  63. ;    nop
  64. ;    nop
  65. ;    dbra    d1,loop3\@
  66.  
  67. ;    movem.l    (sp)+,d1
  68.  
  69.     endm
  70.  
  71. GREEN    macro
  72.     move.w    #$0f0,$dff180
  73.     endm
  74.  
  75. BLUE    macro
  76.     move.w    #$f,$dff180
  77.     endm
  78.  
  79. DataCacheOff macro
  80.     movem.l    a0-a6/d0-d7,-(sp)
  81.     move.l    4.w,a6
  82.     moveq    #0,d0
  83.     move.l    #%0000000100000000,d1
  84.     jsr    _LVOCacheControl(a6)
  85.     movem.l    (sp)+,a0-a6/d0-d7
  86.     endm
  87.  
  88. DataCacheOn macro
  89.     movem.l    a0-a6/d0-d7,-(sp)
  90.     move.l    4.w,a6
  91.     moveq    #-1,d0
  92.     move.l    #%0000000100000000,d1
  93.     jsr    _LVOCacheControl(a6)
  94.     movem.l    (sp)+,a0-a6/d0-d7
  95.     endm
  96.  
  97.     opt    P=68020
  98.  
  99.     include utils:sysinc/hardware/intbits.i
  100.  
  101. CD32VER equ 0
  102.  
  103. maxscrdiv EQU 8
  104. max3ddiv EQU 5
  105. playerheight EQU 12*1024
  106. playercrouched EQU 8*1024
  107. scrheight EQU 80
  108.  
  109. ; k/j/m
  110.  
  111. ; 4/8
  112. ; s/x
  113. ; b/n
  114.  
  115. midoffset EQU 104*4*40
  116.  
  117.  
  118.  SECTION Scrn,CODE
  119. OpenLib       equ -552
  120. CloseLib      equ -414
  121.  
  122. INTREQ        equ    $09C
  123. INTENA        equ    $09A
  124. INTENAR    equ    $01C
  125. DMACON        equ    $096
  126.  
  127. SERPER        equ    $032
  128. SERDATR    equ    $018
  129. SERDAT        equ    $030
  130. vhposr        equ $006    
  131. vhposrl    equ $007 
  132.  
  133. bltcon0    equ $40 
  134. bltcon1    equ $42
  135. bltcpt        equ $48
  136. bltbpt        equ $4c
  137. bltapt        equ $50
  138. spr0ctl    equ $142
  139. spr1ctl    equ $14a
  140. spr2ctl    equ $152
  141. spr3ctl    equ $15a
  142. spr4ctl    equ $162
  143. spr5ctl    equ $16a
  144. spr6ctl    equ $172
  145. spr7ctl    equ $17a
  146. spr0pos    equ $140
  147. spr1pos    equ $148
  148. spr2pos    equ $150
  149. spr3pos    equ $158
  150. spr4pos    equ $160
  151. spr5pos    equ $168
  152. spr6pos    equ $170
  153. spr7pos    equ $178
  154. bltdpt         equ $54
  155. bltafwm    equ $44
  156. bltalwm    equ $46
  157. bltsize         equ $58
  158. bltcmod         equ $60
  159. bltbmod         equ $62
  160. bltamod         equ $64
  161. bltdmod         equ $66
  162. diwstart        equ $8e         ; Screen hardware registers.
  163. diwstop         equ $90
  164. ddfstart        equ $92
  165. ddfstop         equ $94
  166. bplcon0         equ $100
  167. bplcon1         equ $102
  168. col0            equ $180
  169. col1            equ $182
  170. col2        equ $184
  171. col3        equ $186
  172. col4        equ $188
  173. col5        equ $18a
  174. col6        equ $18c
  175. col7        equ $18e
  176. col8            equ $190
  177. col9            equ $192
  178. col10           equ $194
  179. col11           equ $196
  180. col12           equ $198
  181. col13           equ $19a
  182. dmacon        equ $96
  183. dmaconr        equ $002
  184. intenar        equ $01c
  185. intena        equ $09a
  186. intreq        equ $09c
  187. intreqr        equ $01e
  188. intreqrl    equ $01f
  189. bpl1pth         equ $e0
  190. bpl1ptl         equ $e2
  191. bpl2pth        equ $e4
  192. bpl2ptl        equ $e6
  193. bpl3pth        equ $e8
  194. bpl3ptl        equ $ea
  195. bpl4pth        equ $ec
  196. bpl4ptl        equ $ee
  197. bpl5pth        equ $f0
  198. bpl5ptl        equ $f2
  199. bpl6pth        equ $f4
  200. bpl6ptl        equ $f6
  201. bpl7pth        equ $f8
  202. bpl7ptl        equ $fa
  203. bpl8pth        equ $fc
  204. bpl8ptl        equ $fe
  205. spr0pth        equ $120
  206. spr0ptl        equ $122
  207. spr1pth        equ $124
  208. spr1ptl        equ $126
  209. spr2pth        equ $128
  210. spr2ptl        equ $12a
  211. spr3pth        equ $12c
  212. spr3ptl        equ $12e
  213. spr4pth        equ $130
  214. spr4ptl        equ $132
  215. spr5pth        equ $134
  216. spr5ptl        equ $136
  217. spr6pth        equ $138
  218. spr6ptl        equ $13a
  219. spr7pth        equ $13c
  220. spr7ptl        equ $13e
  221. adkcon        equ   $09E
  222.  
  223.  
  224. ; move.l #length,d0
  225. ; moveq.l #2,d1    ; chipmem
  226. ; move.l 4.w,a6
  227. ; jsr allocmem(a6) = -198
  228.  
  229. ; tst.l d0
  230. ; beq.s ohbugger
  231. ; move.l d0,memaddr
  232.  
  233.  
  234. ; move.l 4.w,a6
  235. ; move.l memaddr,a1
  236. ; move.l #size,d0
  237. ; jsr freemem(a6) =-210
  238.  
  239.  
  240. ** This waits for the blitter to finish before allowing program
  241. ** execution to continue.
  242.  
  243.  
  244.  include "ab3:source_4000/protsetupdecode"
  245.  
  246.  
  247. SAVEREGS MACRO
  248.  movem.l d0-d7/a0-a6,-(a7)
  249.  ENDM
  250.  
  251. GETREGS MACRO
  252.  movem.l (a7)+,d0-d7/a0-a6
  253.  ENDM
  254.  
  255.  
  256. WB MACRO
  257. \@bf:
  258.  btst #6,dmaconr(a6)
  259.  bne.s \@bf
  260.  ENDM
  261.  
  262. WBa MACRO
  263. \@bf:
  264.  move.w #\2,$dff180
  265.  
  266.  btst #6,$bfe001
  267.  bne.s \@bf
  268. \@bz:
  269.  
  270.  move.w #$f0f,$dff180
  271.  
  272.  btst #6,$bfe001
  273.  beq.s \@bz
  274.  
  275.  ENDM
  276.  
  277. *Another version for when a6 <> dff000
  278.  
  279. WBSLOW MACRO
  280. \@bf:
  281.  btst #6,$dff000+dmaconr
  282.  bne.s \@bf
  283.  ENDM
  284.  
  285. WT MACRO
  286. \@bf:
  287.  btst #6,(a3)
  288.  bne.s \@bd
  289.  rts
  290. \@bd: 
  291.  btst #4,(a0)
  292.  beq.s \@bf
  293.  ENDM
  294.  
  295. WTNOT MACRO
  296. \@bf:
  297.  btst #6,(a3)
  298.  bne.s \@bd
  299.  rts
  300. \@bd: 
  301.  btst #4,(a0)
  302.  bne.s \@bf
  303.  ENDM
  304.  
  305. **
  306.  
  307.  include "ab3:source_4000/ProtectionProtection"
  308.  include "macros.i"
  309.  include "ab3:source_4000/defs.i"
  310.  
  311. wtclickk:
  312.  btst #6,$bfe001
  313.  bne.s wtclickk
  314.  
  315.  move.w (a0)+,LEVTOPLAY
  316.  
  317.  
  318.  jsr MakePatch
  319.  
  320. ;    FLASHER $0f0,$fff
  321.  
  322. ; PROTFCALC
  323. ; PROTGCALC
  324. ; PROTHCALC
  325. ; PROTICALC
  326. ; PROTKCALC
  327. ; PROTLCALC
  328. ; PROTMCALC
  329.  
  330.  
  331.  
  332.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  333.  move.w intenar(a6),_storeint
  334.  and.w #$c000,_storeint
  335.  
  336.  move.w #13,SERPER(a6)    ;19200 baud, 8 bits, no parity
  337.  
  338.  
  339.  st GOURSEL
  340.  
  341.  move.l 4.w,a6
  342.  lea VBLANKInt(pc),a1
  343.  moveq #INTB_COPER,d0
  344.  jsr _LVOAddIntServer(a6)
  345.  
  346.     IFEQ CD32VER
  347.  move.l 4.w,a6
  348.  lea KEYInt(pc),a1
  349.  moveq #INTB_PORTS,d0
  350.  jsr _LVOAddIntServer(a6)
  351.     ENDC
  352.  
  353.  IFNE CD32VER
  354.  clr.b PLR1KEYS
  355.  clr.b PLR1PATH
  356.  clr.b PLR1MOUSE
  357.  st PLR1JOY
  358.  clr.b PLR2KEYS
  359.  clr.b PLR2PATH
  360.  clr.b PLR2MOUSE
  361.  st PLR2JOY
  362.  ELSE
  363.  st PLR1KEYS
  364.  clr.b PLR1PATH
  365.  clr.b PLR1MOUSE
  366.  clr.b PLR1JOY
  367.  st PLR2KEYS
  368.  clr.b PLR2PATH
  369.  clr.b PLR2MOUSE
  370.  clr.b PLR2JOY
  371.  ENDC
  372.  
  373.  PRSDO
  374.  
  375.  move.l #2,d1    
  376.  move.l #10240*2,d0
  377.  move.l 4.w,a6
  378.  jsr -198(a6)
  379.  move.l d0,TEXTSCRN
  380.  move.w d0,TSPTl
  381.  swap d0
  382.  move.w d0,TSPTh
  383.  
  384.  move.l #nullspr,d0
  385.  move.w d0,txs0l
  386.  move.w d0,txs1l
  387.  move.w d0,txs2l
  388.  move.w d0,txs3l
  389.  move.w d0,txs4l
  390.  move.w d0,txs5l
  391.  move.w d0,txs6l
  392.  move.w d0,txs7l
  393.  swap d0
  394.  move.w d0,txs0h
  395.  move.w d0,txs1h
  396.  move.w d0,txs2h
  397.  move.w d0,txs3h
  398.  move.w d0,txs4h
  399.  move.w d0,txs5h
  400.  move.w d0,txs6h
  401.  move.w d0,txs7h 
  402.  
  403.  move.l #0,d1    
  404.  move.l #140000,d0
  405.  move.l 4.w,a6
  406.  jsr -198(a6)
  407.  move.l d0,LEVELDATA
  408.  
  409.  move.l #0,d1
  410.  
  411.  ifeq CHEESEY    
  412.  move.l #320*256,d0
  413.  endc
  414.  
  415.  ifne CHEESEY
  416.  move.l #320*160,d0
  417.  endc
  418.  
  419.  move.l 4.w,a6
  420.  jsr -198(a6)
  421.  move.l d0,FASTBUFFER
  422.  
  423.  jsr START
  424.  
  425.  rts
  426.  
  427. FASTBUFFER: dc.l 0
  428.  
  429. _storeint
  430.     dc.w 0
  431.  
  432. * Load level into buffers.
  433.  clr.b doanything
  434.  clr.b dosounds
  435.  
  436. ; DRAW TEXT SCREEN
  437.  
  438. TWEENTEXT:
  439.  
  440.  move.l #LEVELTEXT,a0
  441.  move.w PLOPT,d0
  442.  muls #82*16,d0
  443.  add.l d0,a0
  444.  
  445.  move.w #14,d7
  446.  move.w #0,d0
  447. DOWNTEXT:
  448.  move.l TEXTSCRN,a1
  449.  jsr DRAWLINEOFTEXT
  450.  addq #1,d0
  451.  add.w #82,a0
  452.  dbra d7,DOWNTEXT
  453.  rts
  454.  
  455. FONTADDRS:
  456.  dc.l ENDFONT0,CHARWIDTHS0
  457.  dc.l ENDFONT1,CHARWIDTHS1
  458.  dc.l ENDFONT2,CHARWIDTHS2
  459.  
  460. ENDFONT0:
  461.  incbin "endfont0"
  462. CHARWIDTHS0:
  463.  incbin "charwidths0"
  464. ENDFONT1:
  465. ; incbin "endfont1"
  466. CHARWIDTHS1:
  467. ; incbin "charwidths1"
  468. ENDFONT2:
  469. ; incbin "endfont2"
  470. CHARWIDTHS2:
  471. ; incbin "charwidths2"
  472.  
  473.  even
  474.  
  475. DRAWLINEOFTEXT:
  476.  movem.l d0/a0/d7,-(a7)
  477.  
  478.  muls #80*16,d0
  479.  add.l d0,a1    ; screen pointer
  480.  
  481.  move.l #FONTADDRS,a3
  482.  moveq #0,d0
  483.  move.b (a0)+,d0
  484.  move.l (a3,d0.w*8),a2
  485.  move.l 4(a3,d0.w*8),a3
  486.  
  487.  moveq #0,d1    ; width counter:
  488.  move.w #79,d6
  489.  tst.b (a0)+
  490.  beq.s NOTCENTRED
  491.  moveq #-1,d5
  492.  move.l a0,a4
  493.  moveq #0,d2
  494.  moveq #0,d3
  495.  move.w #79,d0    ; number of chars
  496. .addup:
  497.  addq #1,d5
  498.  move.b (a4)+,d2
  499.  move.b -32(a3,d2.w),d4
  500.  add.w d4,d3
  501.  cmp.b #32,d2
  502.  beq.s .DONTPUTIN
  503.  move.w d5,d6
  504.  move.w d3,d1
  505. .DONTPUTIN:
  506.  dbra d0,.addup
  507.  asr.w #1,d1
  508.  neg.w d1
  509.  add.w #320,d1    ; horiz pos of start x
  510.  
  511. NOTCENTRED:
  512.  move.w d6,d7
  513. DOACHAR:
  514.  moveq #0,d2
  515.  move.b (a0)+,d2
  516.  sub.w #32,d2
  517.  moveq #0,d6
  518.  move.b (a3,d2.w),d6
  519.  asl.w #5,d2
  520.  lea (a2,d2.w),a4    ; char font
  521. val SET 0
  522.  REPT 16
  523.  move.w (a4)+,d0
  524.  bfins d0,val(a1){d1:d6}
  525. val SET val+80
  526.  ENDR
  527.  add.w d6,d1
  528.  dbra d7,DOACHAR
  529.  movem.l (a7)+,d0/a0/d7
  530.  rts 
  531.  
  532.  
  533. CLRTWEENSCRN:
  534.  move.l TEXTSCRN,a0
  535.  move.w #(10240/16)-1,d0
  536.  move.l #$0,d1
  537. .lll
  538.  move.l d1,(a0)+
  539.  move.l d1,(a0)+
  540.  move.l d1,(a0)+
  541.  move.l d1,(a0)+
  542.  move.l d1,(a0)+
  543.  move.l d1,(a0)+
  544.  move.l d1,(a0)+
  545.  move.l d1,(a0)+
  546.  dbra d0,.lll
  547.  rts
  548.  
  549. LEVTOPLAY: dc.w 0
  550.  
  551. COPYLINK: dc.l 0
  552.  
  553. PLAYTHEGAME:
  554.  
  555.  move.w #0,TXTCOLL
  556.  
  557.  bsr CLRTWEENSCRN
  558.  
  559.  cmp.b #'n',mors
  560.  bne.s .notext
  561.  bsr TWEENTEXT
  562. .notext
  563.  
  564. ;charlie 
  565.  move.l #TEXTCOP,$dff080
  566.  
  567.  move.w #$10,d0
  568.  move.w #7,d1
  569.  
  570. .fdup
  571.  move.w d0,TXTCOLL
  572.  add.w #$121,d0
  573. .wtframe:
  574.  btst #5,$dff000+intreqrl
  575.  beq.s .wtframe
  576.  move.w #$0020,$dff000+intreq
  577.  dbra d1,.fdup
  578.  
  579.  jsr INITCOPPERSCRN
  580.  
  581.  move.l #$dff000,a6
  582.  jsr SETPLAYERS
  583.  
  584.  move.l #0,TYPEOFMEM
  585.  move.l #LLname,a0
  586.  jsr LOADAFILE
  587.  move.l d0,LINKS
  588.  
  589.  move.l #0,TYPEOFMEM
  590.  move.l #LLFname,a0
  591.  jsr LOADAFILE
  592.  move.l d0,FLYLINKS
  593.  
  594. ; Get level memory.
  595.  
  596.  move.l #1,d1
  597.  move.l #40000,d0
  598.  move.l 4.w,a6
  599.  jsr -198(a6)
  600.  move.l d0,LEVELGRAPHICS
  601.  
  602.  move.l #1,d1
  603.  move.l #40000,d0
  604.  move.l 4.w,a6
  605.  jsr -198(a6)
  606.  move.l d0,LEVELCLIPS
  607.  
  608.  move.l #$dff000,a6
  609.  
  610. ; move.b LEVTOPLAY,d0
  611. ; move.b d0,LEVA
  612. ; move.b d0,LEVB
  613. ; move.b d0,LEVC
  614. ; move.b d0,LEVD
  615. ; move.b d0,LEVE
  616.  
  617.  
  618. ; move.l #LEVELDATAD,LEVELDATA
  619. ; move.l #LEVELGRAPHICSD,LEVELGRAPHICS
  620. ; move.l #LEVELCLIPSD,LEVELCLIPS
  621.  
  622. ; bra noload
  623.  
  624. *********************************
  625.  
  626. ; move.l doslib,a6
  627. ; move.l #LLname,d1
  628. ; move.l #1005,d2
  629. ; jsr -30(a6)
  630. ; move.l d0,LLhandle
  631. ;
  632. ; move.l doslib,a6
  633. ; move.l d0,d1
  634. ; move.l #LINKS,d2
  635. ; move.l #10000,d3
  636. ; jsr -42(a6)
  637. ;
  638. ; move.l doslib,a6
  639. ; move.l LLhandle,d1
  640. ; jsr -36(a6)
  641.  
  642.  ********************************
  643.  
  644. ; move.l doslib,a6
  645. ; move.l #LLFname,d1
  646. ; move.l #1005,d2
  647. ; jsr -30(a6)
  648. ; move.l d0,LLhandle
  649.  
  650. ; move.l doslib,a6
  651. ; move.l d0,d1
  652. ; move.l #FLYLINKS,d2
  653. ; move.l #10000,d3
  654. ; jsr -42(a6)
  655.  
  656. ; move.l doslib,a6
  657. ; move.l LLhandle,d1
  658. ; jsr -36(a6)
  659.  
  660.  ************************
  661.  ********
  662.  
  663.  
  664.  move.l doslib,a6
  665.  move.l #LDname,d1
  666.  move.l #1005,d2
  667.  jsr -30(a6)
  668.  move.l d0,LDhandle
  669.  
  670.  move.l doslib,a6
  671.  move.l d0,d1
  672.  move.l LEVELCLIPS,d2
  673.  move.l #40000,d3
  674.  jsr -42(a6)
  675.  
  676.  move.l doslib,a6
  677.  move.l LDhandle,d1
  678.  jsr -36(a6)
  679.  
  680. *************************************
  681.     move.l    LEVELCLIPS,d0
  682.     moveq    #0,d1
  683.     move.l LEVELDATA,a0
  684.     lea    WorkSpace,a1
  685.     lea    $0,a2
  686.     jsr    unLHA
  687. *************************************
  688.  
  689. ********
  690.  
  691.  move.l doslib,a6
  692.  move.l #LGname,d1
  693.  move.l #1005,d2
  694.  jsr -30(a6)
  695.  move.l d0,LGhandle
  696.  
  697.  move.l doslib,a6
  698.  move.l d0,d1
  699.  move.l LEVELCLIPS,d2
  700.  move.l #40000,d3
  701.  jsr -42(a6)
  702.  
  703.  move.l doslib,a6
  704.  move.l LGhandle,d1
  705.  jsr -36(a6)
  706.  
  707. *************************************
  708.     move.l    LEVELCLIPS,d0
  709.     moveq    #0,d1
  710.     move.l LEVELGRAPHICS,a0
  711.     lea    WorkSpace,a1
  712.     lea    $0,a2
  713.     jsr    unLHA
  714. *************************************
  715.  
  716. ********
  717.  
  718.  move.l doslib,a6
  719.  move.l #LCname,d1
  720.  move.l #1005,d2
  721.  jsr -30(a6)
  722.  move.l d0,LChandle
  723.  
  724.  move.l doslib,a6
  725.  move.l d0,d1
  726.  move.l #WorkSpace+16384,d2
  727.  move.l #16000,d3
  728.  jsr -42(a6)
  729.  
  730.  move.l doslib,a6
  731.  move.l LChandle,d1
  732.  jsr -36(a6)
  733.  
  734. *************************************
  735.     move.l    #WorkSpace+16384,d0
  736.     moveq    #0,d1
  737.     move.l LEVELCLIPS,a0
  738.     lea    WorkSpace,a1
  739.     lea    $0,a2
  740.     jsr    unLHA
  741. *************************************
  742.  
  743.  
  744. *******
  745.  
  746. noload:
  747.  
  748. ********
  749.  
  750. ; move.l doslib,a6
  751. ; move.l #Prefsname,d1
  752. ; move.l #1005,d2
  753. ; jsr -30(a6)
  754. ; move.l d0,Prefshandle
  755.  
  756. ; move.l doslib,a6
  757. ; move.l d0,d1
  758. ; move.l #Prefsfile,d2
  759. ; move.l #50,d3
  760. ; jsr -42(a6)
  761.  
  762. ; move.l doslib,a6
  763. ; move.l Prefshandle,d1
  764. ; jsr -36(a6)
  765.  
  766. *******
  767.  
  768.  IFNE CD32VER
  769.  move.l doslib,a6
  770.  move.l #115,d1
  771.  jsr -198(a6)
  772.  ENDC
  773.  
  774.  
  775. ; move.l doslib,d0
  776. ; move.l d0,a1
  777. ; move.l 4.w,a6
  778. ; jsr CloseLib(a6)
  779.  
  780.  move.l #$dff000,a6
  781.  
  782. charlie:
  783. ; jmp  ENDGAMESCROLL
  784.  
  785.     move.w #$87c0,dmacon(a6)
  786.  
  787.     move.w    #%1000000000100000,dmacon(a6)
  788.  
  789. ; move.w intenar(a6),saveinters
  790.     
  791.     move.w #%00101111,intena(a6)
  792.  
  793.     move.w #255,adkcon(a6)
  794.  
  795.  
  796. *** Put myself in supervisor mode
  797.  
  798.  bra blag
  799. ; move.l $6c,d0
  800. ; move.l #blag,$6c
  801. ; move.w #$8010,intreq(a6)
  802.  
  803.  rts
  804.  
  805. saveit: ds.l 10
  806. doslibname: dc.b 'dos.library',0
  807.  even
  808. doslib: dc.l 0
  809.  
  810. mors: dc.w 0
  811.  
  812. LDname: dc.b 'ab3:levels/level_'
  813. LEVA:
  814.  dc.b 'a/twolev.bin',0
  815.  even
  816. LDhandle: dc.l 0
  817. LGname: dc.b 'ab3:levels/level_'
  818. LEVB:
  819.  dc.b 'a/twolev.graph.bin',0
  820.  even
  821. LGhandle: dc.l 0
  822. LCname: dc.b 'ab3:levels/level_'
  823. LEVC:
  824.  dc.b 'a/twolev.clips',0
  825.  even
  826. LChandle: dc.l 0
  827. LLname: dc.b 'ab3:levels/level_'
  828. LEVD:
  829.  dc.b 'a/twolev.map',0
  830.  even
  831. LLFname: dc.b 'ab3:levels/level_'
  832. LEVE:
  833.  dc.b 'a/twolev.flymap',0
  834.  even
  835. LLhandle: dc.l 0
  836.  
  837.     cnop    0,4
  838.  
  839. Prefsname: dc.b 'ram:prefs',0
  840.  even
  841. Prefshandle: dc.l 0
  842.  
  843. Prefsfile:
  844.  dc.b 'k4nx'
  845.  
  846.  even
  847.  
  848.  cnop 0,4
  849.  
  850. VBLANKInt
  851.  dc.l 0,0
  852.  dc.b NT_INTERRUPT,9
  853.  dc.l Prefsname
  854.  dc.l 0
  855.  dc.l Chan0inter
  856.  
  857.  
  858. KEYInt
  859.  dc.l 0,0
  860.  dc.b NT_INTERRUPT,127
  861.  dc.l Prefsname
  862.  dc.l 0
  863.  dc.l key_interrupt
  864.  
  865.  
  866. blag:
  867. ; move.w #$10,intreq(a6)
  868. ; move.l d0,$6c
  869. ; move.w #$7fff,intena(a6)
  870.  
  871. ; move.w #$20,$dff1dc
  872.  
  873. ; move.l 4.w,a6
  874. ; lea VBLANKInt(pc),a1
  875. ; moveq #INTB_COPER,d0
  876. ; jsr _LVOAddIntServer(a6)
  877.  
  878. ****************************
  879. * Initialize level
  880. ****************************
  881. * Poke all clip offsets into
  882. * correct bit of level data.
  883. ****************************
  884.  move.l LEVELGRAPHICS,a0
  885.  move.l 12(a0),a1
  886.  add.l a0,a1
  887.  move.l a1,ZoneGraphAdds
  888.  move.l (a0),a1
  889.  add.l a0,a1
  890.  move.l a1,DoorData
  891.  move.l 4(a0),a1
  892.  add.l a0,a1
  893.  move.l a1,LiftData
  894.  move.l 8(a0),a1
  895.  add.l a0,a1
  896.  move.l a1,SwitchData
  897.  adda.w #16,a0
  898.  move.l a0,ZoneAdds
  899.  
  900.  move.l LEVELDATA,a4
  901.  lea 160*10(a4),a1
  902.  
  903.  lea 54(a1),a2
  904.  move.l a2,CPtPos
  905.  move.w 12(a1),NumCPts
  906.  move.w 14(a1),NumLevPts
  907.  
  908.  move.l 16+6(a1),a2
  909.  add.l a4,a2
  910.  move.l a2,Points
  911.  move.w 8+6(a1),d0
  912.  lea 4(a2,d0.w*4),a2
  913.  move.l a2,PointBrights
  914.  move.w 16(a1),d0
  915.  addq #1,d0
  916.  muls #80,d0
  917.  add.l d0,a2
  918.  move.l a2,ZoneBorderPts
  919.  
  920.  move.l 20+6(a1),a2
  921.  add.l a4,a2
  922.  move.l a2,FloorLines
  923.  move.w -2(a2),ENDZONE
  924.  move.l 24+6(a1),a2
  925.  add.l a4,a2
  926.  move.l a2,ObjectData
  927. *****************************************
  928. * Just for charles
  929.  
  930. ; move.w #$6060,6(a2)
  931. ; move.l #$d0000,8(a2)
  932. ; sub.w #40,4(a2)
  933. ; move.w #45*256+45,14(a2)
  934. ****************************************
  935.  move.l 28+6(a1),a2
  936.  add.l a4,a2
  937.  move.l a2,PlayerShotData
  938.  move.l 32+6(a1),a2
  939.  add.l a4,a2
  940.  move.l a2,NastyShotData
  941.  
  942.  add.l #64*20,a2
  943.  move.l a2,OtherNastyData
  944.  
  945.  move.l 36+6(a1),a2
  946.  add.l a4,a2
  947.  move.l a2,ObjectPoints  
  948.  move.l 40+6(a1),a2
  949.  add.l a4,a2
  950.  move.l a2,PLR1_Obj
  951.  move.l 44+6(a1),a2
  952.  add.l a4,a2
  953.  move.l a2,PLR2_Obj
  954.  move.w 14+6(a1),NumObjectPoints
  955.  
  956. ; bra noclips
  957.   
  958.  move.l LEVELCLIPS,a2
  959.  moveq #0,d0
  960.  move.w 10+6(a1),d7    ;numzones
  961.  move.w d7,NUMZONES
  962. assignclips:
  963.  move.l (a0)+,a3
  964.  add.l a4,a3    ; pointer to a zone
  965.  adda.w #ToListOfGraph,a3 ; pointer to zonelist
  966. dowholezone:
  967.  tst.w (a3)
  968.  blt.s nomorethiszone
  969.  tst.w 2(a3)
  970.  blt.s thisonenull
  971.  
  972.  move.l d0,d1
  973.  asr.l #1,d1
  974.  move.w d1,2(a3)
  975.  
  976. findnextclip:
  977.  cmp.w #-2,(a2,d0.l)
  978.  beq.s foundnextclip
  979.  addq.l #2,d0
  980.  bra.s findnextclip
  981. foundnextclip
  982.  addq.l #2,d0
  983.  
  984. thisonenull:
  985.  addq #8,a3 
  986.  bra.s dowholezone
  987. nomorethiszone:
  988.  dbra d7,assignclips
  989.  
  990.  lea (a2,d0.l),a2
  991.  move.l a2,CONNECT_TABLE
  992.  
  993. noclips:
  994.  
  995. * Put in addresses of glowything
  996.  
  997.  
  998. ************************************
  999.  
  1000. ; cmp.b #'k',Prefsfile
  1001. ; bne.s nkb
  1002.  
  1003. ;nkb:
  1004. ; cmp.b #'m',Prefsfile
  1005. ; bne.s nmc
  1006. ; clr.b PLR1KEYS
  1007. ; clr.b PLR1PATH
  1008. ; st PLR1MOUSE
  1009. ; clr.b PLR1JOY
  1010. ;nmc:
  1011. ; cmp.b #'j',Prefsfile
  1012. ; bne.s njc
  1013. ; clr.b PLR1KEYS
  1014. ; clr.b PLR1PATH
  1015. ; clr.b PLR1MOUSE
  1016. ; st PLR1JOY
  1017. ;njc:
  1018.  
  1019.  clr.b PLR1_StoodInTop
  1020.  move.l #playerheight,PLR1s_height
  1021.  
  1022.  move.l #empty,pos1LEFT
  1023.  move.l #empty,pos2LEFT
  1024.  move.l #empty,pos1RIGHT
  1025.  move.l #empty,pos2RIGHT
  1026.  move.l #empty,pos0LEFT
  1027.  move.l #empty,pos3LEFT
  1028.  move.l #empty,pos0RIGHT
  1029.  move.l #empty,pos3RIGHT
  1030.  move.l #emptyend,Samp0endLEFT
  1031.  move.l #emptyend,Samp1endLEFT
  1032.  move.l #emptyend,Samp0endRIGHT
  1033.  move.l #emptyend,Samp1endRIGHT
  1034.  move.l #emptyend,Samp2endLEFT
  1035.  move.l #emptyend,Samp3endLEFT
  1036.  move.l #emptyend,Samp2endRIGHT
  1037.  move.l #emptyend,Samp3endRIGHT
  1038.  
  1039.  
  1040.  move.l #nullline,d0
  1041.  move.w d0,n1l
  1042.  swap d0
  1043.  move.w d0,n1h
  1044.  
  1045.  move.l Panel,d0
  1046.  move.w d0,p1l
  1047.  swap d0
  1048.  move.w d0,p1h
  1049.  swap d0
  1050.  add.l #40,d0
  1051.  move.w d0,p2l
  1052.  swap d0
  1053.  move.w d0,p2h
  1054.  swap d0
  1055.  add.l #40,d0
  1056.  move.w d0,p3l
  1057.  swap d0
  1058.  move.w d0,p3h
  1059.  swap d0
  1060.  add.l #40,d0
  1061.  move.w d0,p4l
  1062.  swap d0
  1063.  move.w d0,p4h
  1064.  swap d0
  1065.  add.l #40,d0
  1066.  move.w d0,p5l
  1067.  swap d0
  1068.  move.w d0,p5h
  1069.  swap d0
  1070.  add.l #40,d0
  1071.  move.w d0,p6l
  1072.  swap d0
  1073.  move.w d0,p6h
  1074.  swap d0
  1075.  add.l #40,d0
  1076.  move.w d0,p7l
  1077.  swap d0
  1078.  move.w d0,p7h
  1079.  swap d0
  1080.  add.l #40,d0
  1081.  move.w d0,p8l
  1082.  swap d0
  1083.  move.w d0,p8h
  1084.  
  1085. *******************************
  1086. * TIMER SCREEN SETUP
  1087. ; move.l #TimerScr,d0
  1088. ; move.w d0,p1l
  1089. ; swap d0
  1090. ; move.w d0,p1h
  1091. ; move.w #$1201,Panelcon
  1092.  
  1093. ; move.l #borders,d0
  1094. ; move.w d0,s0l
  1095. ; swap d0
  1096. ; move.w d0,s0h
  1097. ; move.l #borders+2592,d0
  1098. ; move.w d0,s1l
  1099. ; swap d0
  1100. ; move.w d0,s1h
  1101. ; move.l #borders+2592*2,d0
  1102. ; move.w d0,s2l
  1103. ; swap d0
  1104. ; move.w d0,s2h
  1105. ; move.l #borders+2592*3,d0
  1106. ; move.w d0,s3l
  1107. ; swap d0
  1108. ; move.w d0,s3h
  1109.  
  1110.  move.l #nullspr,d0
  1111.  move.w d0,s0l
  1112.  move.w d0,s1l
  1113.  move.w d0,s2l
  1114.  move.w d0,s3l
  1115.  
  1116.  move.w d0,s4l
  1117.  move.w d0,s5l
  1118.  move.w d0,s6l
  1119.  move.w d0,s7l
  1120.  swap d0
  1121.  
  1122.  move.w d0,s0h
  1123.  move.w d0,s1h
  1124.  move.w d0,s2h
  1125.  move.w d0,s3h
  1126.  
  1127.  move.w d0,s4h
  1128.  move.w d0,s5h
  1129.  move.w d0,s6h
  1130.  move.w d0,s7h 
  1131.  
  1132.  
  1133. ; move.w #52*256+64,borders
  1134. ; move.w #212*256+0,borders+8
  1135. ; move.w #52*256+64,borders+2592
  1136. ; move.w #212*256+128,borders+8+2592
  1137. ; move.w #52*256+192,borders+2592*2
  1138. ; move.w #212*256+0,borders+8+2592*2
  1139. ; move.w #52*256+192,borders+2592*3
  1140. ; move.w #212*256+128,borders+8+2592*3
  1141.  
  1142.  move.l #FacePlace,d0
  1143.  move.w d0,f1l
  1144.  swap d0
  1145.  move.w d0,f1h
  1146.  move.l #FacePlace+32*24,d0
  1147.  move.w d0,f2l
  1148.  swap d0
  1149.  move.w d0,f2h
  1150.  move.l #FacePlace+32*24*2,d0
  1151.  move.w d0,f3l
  1152.  swap d0
  1153.  move.w d0,f3h
  1154.  move.l #FacePlace+32*24*3,d0
  1155.  move.w d0,f4l
  1156.  swap d0
  1157.  move.w d0,f4h
  1158.  move.l #FacePlace+32*24*4,d0
  1159.  move.w d0,f5l
  1160.  swap d0
  1161.  move.w d0,f5h
  1162.   
  1163.  
  1164.  move.l #bigfield,d0
  1165.  move.w d0,ocl
  1166.  swap d0
  1167.  move.w d0,och
  1168.  
  1169.  bset.b #1,$bfe001
  1170.  
  1171. ; jmp stuff
  1172. ;endstuff:
  1173.  
  1174.  move.w #$00ff,$dff09e
  1175.  
  1176. ; move.l #Blurbfield,$dff080
  1177.  
  1178.  move.w #0,d0
  1179.  
  1180.  move.l scrn,d0
  1181.  move.w d0,pl1l
  1182.  swap d0
  1183.  move.w d0,pl1h
  1184.  
  1185.  swap d0
  1186.  add.l #10240,d0
  1187.  move.w d0,pl2l
  1188.  swap d0
  1189.  move.w d0,pl2h
  1190.  
  1191.  swap d0
  1192.  add.l #10240,d0
  1193.  move.w d0,pl3l
  1194.  swap d0
  1195.  move.w d0,pl3h
  1196.  
  1197.  swap d0
  1198.  add.l #10240,d0
  1199.  move.w d0,pl4l
  1200.  swap d0
  1201.  move.w d0,pl4h
  1202.  
  1203.  swap d0
  1204.  add.l #10240,d0
  1205.  move.w d0,pl5l
  1206.  swap d0
  1207.  move.w d0,pl5h
  1208.  
  1209.  swap d0
  1210.  add.l #10240,d0
  1211.  move.w d0,pl6l
  1212.  swap d0
  1213.  move.w d0,pl6h
  1214.  
  1215.  swap d0
  1216.  add.l #10240,d0
  1217.  move.w d0,pl7l
  1218.  swap d0
  1219.  move.w d0,pl7h
  1220.  
  1221.  swap d0
  1222.  add.l #10240,d0
  1223.  move.w d0,pl8l
  1224.  swap d0
  1225.  move.w d0,pl8h
  1226.  
  1227.  
  1228. ****************************
  1229.  jsr INITPLAYER
  1230. ; bsr initobjpos
  1231. ****************************
  1232.  
  1233.  
  1234.  move.l #$dff000,a6
  1235.  
  1236.  move.l #null,$dff0a0
  1237.  move.w #100,$dff0a4
  1238.  move.w #443,$dff0a6
  1239.  move.w #63,$dff0a8
  1240.  
  1241.  move.l #null2,$dff0b0
  1242.  move.w #100,$dff0b4
  1243.  move.w #443,$dff0b6
  1244.  move.w #63,$dff0b8
  1245.  
  1246.  move.l #null4,$dff0c0
  1247.  move.w #100,$dff0c4
  1248.  move.w #443,$dff0c6
  1249.  move.w #63,$dff0c8
  1250.  
  1251.  move.l #null3,$dff0d0
  1252.  move.w #100,$dff0d4
  1253.  move.w #443,$dff0d6
  1254.  move.w #63,$dff0d8
  1255.  
  1256.  ifeq CHEESEY
  1257.  
  1258.  move.l #tab,a1
  1259.  move.w #64,d7
  1260.  move.w #0,d6
  1261. outerlop
  1262.  move.l #pretab,a0
  1263.  move.w #255,d5
  1264. scaledownlop:
  1265.  move.b (a0)+,d0
  1266.  ext.w d0
  1267.  ext.l d0
  1268.  muls d6,d0
  1269.  asr.l #6,d0
  1270.  move.b d0,(a1)+
  1271.  dbra d5,scaledownlop
  1272.  addq #1,d6
  1273.  dbra d7,outerlop
  1274.  
  1275.  endc
  1276.  
  1277.  move.l #$dff000,a6
  1278.  
  1279.  move.w #$c018,intena(a6)
  1280.  
  1281.  move.w #$f,dmacon(a6)
  1282.  move.w #$820f,dmacon(a6)
  1283.  
  1284. ; bsr protinit
  1285.  
  1286.  
  1287. ; move.w #$20,$1dc(a6)
  1288.  
  1289.  move.w #$0,$dff034
  1290.  move.w #0,Conditions
  1291.  
  1292.  cmp.b #'n',mors
  1293.  beq.s .nokeys
  1294.  move.w #%111111111111,Conditions
  1295. .nokeys:
  1296.  
  1297.  move.l #KeyMap,a5
  1298.  clr.b $45(a5)
  1299.  
  1300.  move.l #ingame,mt_data
  1301.  clr.b UseAllChannels
  1302.  
  1303. ; cmp.b #'b',Prefsfile+3
  1304. ; bne.s .noback
  1305. ; jsr mt_init
  1306. ;.noback:
  1307. ;
  1308. ; clr.b CHANNELDATA
  1309. ; clr.b CHANNELDATA+8
  1310. ; clr.b CHANNELDATA+16
  1311. ; clr.b CHANNELDATA+24
  1312. ;
  1313. ; cmp.b #'b',Prefsfile+3
  1314. ; bne.s noreserve
  1315. ;
  1316. ; st CHANNELDATA
  1317. ; st CHANNELDATA+8
  1318. ; st CHANNELDATA+16
  1319. ; st CHANNELDATA+24
  1320. ;noreserve: 
  1321.  
  1322. ; st CHANNELDATA
  1323. ; st CHANNELDATA+8
  1324.  
  1325.  move.l SampleList+6*8,pos0LEFT
  1326.  move.l SampleList+6*8+4,Samp0endLEFT
  1327.  move.l #playerheight,PLR1s_targheight
  1328.  move.l #playerheight,PLR1s_height
  1329.  move.l #playerheight,PLR2s_targheight
  1330.  move.l #playerheight,PLR2s_height
  1331.  
  1332. ; cmp.b #'n',mors
  1333. ; beq.s nohandshake
  1334. ;
  1335. ; move.b #%11011000,$bfd200
  1336. ; move.b #%00010000,$bfd000
  1337. ;waitloop:
  1338. ; btst.b #4,$bfd000
  1339. ; bne.s waitloop
  1340. ; move.b #%11000000,$bfd200
  1341.  
  1342. ;wtmouse:
  1343. ; btst #6,$bfe001
  1344. ; bne.s wtmouse
  1345.  
  1346. ;nohandshake:
  1347.  
  1348. ; jmp end
  1349.  
  1350. ; move.l COPSCRN1,drawpt
  1351. ; move.l COPSCRN2,olddrawpt
  1352.  
  1353.  jsr CLEARKEYBOARD
  1354. ; jsr MAKEBACKROUT
  1355.  
  1356.  clr.b MASTERQUITTING
  1357.  
  1358.  cmp.b #'n',mors
  1359.  seq SLAVEQUITTING
  1360.  
  1361. ; move.w #200,PLAYERTWOHEALTH
  1362. ; move.w #200,PLAYERONEHEALTH
  1363.  
  1364. ; move.l #ANOTHERSUP,$80
  1365. ; trap #0
  1366. ; rts
  1367. ;
  1368. ;ANOTHERSUP:
  1369.  
  1370.  move.l $4.w,a6
  1371.  jsr _LVOSuperState(a6)
  1372.  move.l d0,SSTACK
  1373.  
  1374.  CACHE_FREEZE_OFF d2
  1375.  
  1376. ; charlie
  1377. ; DATA_CACHE_ON d2
  1378.  
  1379.  DataCacheOn
  1380.  
  1381.  move.l $4.w,a6
  1382.  move.l SSTACK,d0
  1383.  jsr _LVOUserState(a6)
  1384.  
  1385.  move.l #0,hitcol
  1386.  
  1387.  cmp.b #'n',mors
  1388.  bne.s NOCLTXT
  1389.  
  1390.  move.b #0,lastpressed
  1391. .wtpress
  1392.  btst #6,$bfe001
  1393.  beq.s CLOSETXT
  1394.  btst #7,$bfe001
  1395.  beq.s CLOSETXT
  1396.  tst.b lastpressed
  1397.  beq.s .wtpress
  1398.  
  1399. CLOSETXT:
  1400.  
  1401.  move.w #$8f8,d0
  1402.  move.w #7,d1
  1403.  
  1404. .fdup
  1405.  move.w d0,TXTCOLL
  1406.  sub.w #$121,d0
  1407. .wtframe:
  1408.  btst #5,$dff000+intreqrl
  1409.  beq.s .wtframe
  1410.  move.w #$0020,$dff000+intreq
  1411.  dbra d1,.fdup
  1412.  
  1413.  move.w #0,TXTCOLL
  1414.  
  1415. NOCLTXT:
  1416.  
  1417.  
  1418.  
  1419.     move.l    4.w,a6
  1420.     jsr    _LVOForbid(a6)
  1421. ;    jsr    _LVODisable(a6)
  1422.  
  1423.  
  1424. ;    move.w    #%0111111111111111,intena+$dff000
  1425. ;    move.w    #%1000000011111111,intena+$dff000
  1426.  
  1427.  
  1428. ;charlie 
  1429.  move.l #PALETTEBIT,$dff084
  1430.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1431.  
  1432.  
  1433.  clr.b PLR1_Ducked
  1434.  clr.b PLR2_Ducked
  1435.  clr.b p1_ducked
  1436.  clr.b p2_ducked
  1437.  
  1438. ********************************************
  1439.  
  1440. ;    jmp docredits
  1441.  
  1442. ********************************************
  1443.  
  1444.  
  1445.  st doanything
  1446.  st dosounds
  1447.  
  1448.  jsr CLRNASTYMEM
  1449.  
  1450.  move.l #COMPACTMAP,a0
  1451.  move.l a0,LASTZONE
  1452.  move.w #255,d0
  1453. .clrmap
  1454.  move.l #0,(a0)+
  1455.  dbra d0,.clrmap
  1456.  
  1457.  move.l #COMPACTMAP,a0
  1458.  move.l #BIGMAP,a1
  1459.  
  1460.  bra NOALLWALLS
  1461.  
  1462.  move.l ZoneGraphAdds,a2
  1463. DOALLWALLS:
  1464.  move.l (a2),d0
  1465.  beq.s nomorezones
  1466.  move.l d0,a3
  1467.  
  1468.  addq #8,a2
  1469.  
  1470.  add.l LEVELGRAPHICS,a3
  1471.  addq #2,a3
  1472.  move.l a1,a4
  1473.  
  1474. ; DOLOWERROOM
  1475.  
  1476. innerwalls:
  1477.  move.b (a3),d1
  1478.  move.b 1(a3),d0
  1479.  bne doneinner
  1480.  
  1481.  tst.b d1
  1482.  blt noid
  1483.  
  1484.  move.b d1,d3
  1485.  and.w #15,d1
  1486.  
  1487.  moveq #0,d0
  1488.  move.w d1,d2
  1489.  add.w d1,d1
  1490.  add.w d2,d1
  1491.  addq #1,d1
  1492.  bset d1,d0
  1493.  btst #4,d3
  1494.  beq.s .nodoor
  1495.  addq #1,d1
  1496.  bset d1,d0
  1497. .nodoor
  1498.  
  1499.  or.l d0,(a0)
  1500.  
  1501.  move.w 2(a3),(a4)
  1502.  move.w 4(a3),2(a4)
  1503.  
  1504. noid:
  1505.  
  1506.  add.w #30,a3
  1507.  addq #4,a4
  1508.  
  1509.  bra innerwalls
  1510.  
  1511. doneinner:
  1512.  
  1513.  add.w #40,a1
  1514.  addq #4,a0
  1515.  
  1516.  bra DOALLWALLS
  1517. nomorezones:
  1518.  
  1519. NOALLWALLS
  1520.  
  1521.  move.w #96,MIDDLEX
  1522.  move.w #192,RIGHTX
  1523.  move.w #160,BOTTOMY
  1524.  move.w #80,TOTHEMIDDLE
  1525.  clr.b FULLSCR
  1526.  move.l scrn,a0
  1527.  jsr WIPEDISPLAY
  1528.  move.l scrn2,a0
  1529.  jsr WIPEDISPLAY
  1530.  
  1531.  st PLAYERONEGUNS+1
  1532.  st PLAYERTWOGUNS+1
  1533.  
  1534.  move.w #100,timetodamage
  1535.  
  1536.  move.w #299,d0
  1537.  move.l #DAMAGED,a0
  1538. CLRDAM:
  1539.  move.w #0,(a0)+
  1540.  dbra d0,CLRDAM
  1541.  
  1542.  moveq #0,d0
  1543.  move.w d0,STOPOFFSET
  1544.  neg.w d0
  1545.  add.w TOTHEMIDDLE,d0
  1546.  move.w d0,SMIDDLEY
  1547.  muls #320,d0
  1548.  move.l d0,SBIGMIDDLEY
  1549.  
  1550.  move.w #0,PLR1_AIMSPD
  1551.  move.w #0,PLR2_AIMSPD
  1552.  
  1553.  move.l scrn,SCRNSHOWPT
  1554.  
  1555.  move.l scrn2,SCRNDRAWPT
  1556.  
  1557.  move.w #%110000000000,$dff034
  1558.  
  1559.  
  1560. lop:
  1561.  
  1562.  move.b MAPON,REALMAPON
  1563.  
  1564.  move.b FULLSCRTEMP,d0
  1565.  move.b FULLSCR,d1
  1566.  eor.b d1,d0
  1567.  beq.s .notswapscr2
  1568.  
  1569.  move.b FULLSCRTEMP,FULLSCR
  1570.  beq.s .notswapscr3
  1571.  
  1572.  move.w #144,MIDDLEX
  1573.  move.w #288,RIGHTX
  1574.  move.w #232,BOTTOMY
  1575.  move.w #120,TOTHEMIDDLE
  1576.  move.l SCRNSHOWPT,a0
  1577.  jsr WIPEDISPLAY
  1578.  move.l SCRNDRAWPT,a0
  1579.  jsr WIPEDISPLAY
  1580.  
  1581.  bra.s .notswapscr2
  1582.  
  1583. .notswapscr3:
  1584.  move.w #96,MIDDLEX
  1585.  move.w #192,RIGHTX
  1586.  move.w #160,BOTTOMY
  1587.  move.w #80,TOTHEMIDDLE
  1588.  move.l SCRNSHOWPT,a0
  1589.  jsr WIPEDISPLAY
  1590.  move.l SCRNDRAWPT,a0
  1591.  jsr WIPEDISPLAY
  1592. .notswapscr2:
  1593.  
  1594.  
  1595.  btst #6,$bfe001
  1596. ;charlie bne.b .nocop
  1597.  
  1598. ;charlie move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1599.  
  1600. .nocop
  1601.  
  1602.  move.l #KeyMap,a5
  1603.  
  1604.  cmp.b #'n',mors
  1605.  bne .nopause
  1606.  tst.b $19(a5)
  1607.  beq.s .nopause
  1608.  clr.b doanything
  1609.  
  1610. .waitrel:
  1611.  
  1612.  tst.b PLR1JOY
  1613.  beq.s .NOJOY
  1614.  jsr _ReadJoy1
  1615. .NOJOY
  1616.  
  1617.  tst.b $19(a5)
  1618.  bne.s .waitrel
  1619.  
  1620.  bsr PAUSEOPTS
  1621.  
  1622.  st doanything
  1623. .nopause: 
  1624.  
  1625.  move.l hitcol,d0
  1626.  move.l d0,d1
  1627.  
  1628. ********************************************
  1629. * Remove after colour testing 
  1630. ; moveq #0,d1
  1631. ********************************************
  1632.  
  1633.  add.l #PALETTEBIT,d1
  1634.  tst.l d0
  1635.  beq.s nofadedownhc
  1636.  sub.l #2116,d0
  1637.  move.l d0,hitcol
  1638. nofadedownhc:
  1639.  
  1640.  move.l d1,a0
  1641.  move.l #PALETTESPACE,a1
  1642.  move.l #(2116/4)-2,d0
  1643. putinpal:
  1644.  move.l (a0)+,(a1)+
  1645.  dbra d0,putinpal
  1646.  
  1647.  st READCONTROLS
  1648.  move.l #$dff000,a6
  1649.  
  1650.  
  1651.  cmp.b #'n',mors
  1652.  beq .nopause
  1653.  
  1654.  move.b SLAVEPAUSE,d0
  1655.  or.b MASTERPAUSE,d0
  1656.  beq.s .nopause
  1657.  clr.b doanything
  1658.  
  1659.  move.l #KeyMap,a5
  1660. .waitrel:
  1661.  
  1662.  cmp.b #'s',mors
  1663.  beq.s .RE2
  1664.  tst.b PLR1JOY
  1665.  beq.s .NOJOY
  1666.  jsr _ReadJoy1
  1667.  bra .RE1
  1668. .RE2:
  1669.  tst.b PLR2JOY
  1670.  beq.s .NOJOY
  1671.  jsr _ReadJoy2
  1672. .RE1
  1673. .NOJOY:
  1674.  tst.b $19(a5)
  1675.  bne.s .waitrel
  1676.  
  1677.  bsr PAUSEOPTS
  1678.  
  1679.  cmp.b #'m',mors
  1680.  bne.s .slavelast
  1681.  Jsr SENDFIRST
  1682.  bra .masfirst
  1683. .slavelast
  1684.  Jsr RECFIRST
  1685. .masfirst:
  1686.  clr.b SLAVEPAUSE
  1687.  clr.b MASTERPAUSE
  1688.  st doanything
  1689.  
  1690. .nopause: 
  1691.  
  1692.  
  1693.  move.l drawpt,d0
  1694.  move.l olddrawpt,drawpt
  1695.  move.l d0,olddrawpt
  1696.  
  1697.  move.l SCRNDRAWPT,d0
  1698.  move.l SCRNSHOWPT,SCRNDRAWPT
  1699.  move.l d0,SCRNSHOWPT
  1700.  
  1701. ; move.l d0,$dff084    
  1702.  move.l drawpt,a3
  1703. ; move.l COPSCRNBUFF,a3
  1704.  adda.w #10,a3
  1705.  move.l a3,frompt
  1706.  add.l #104*4*40,a3
  1707.  move.l a3,midpt
  1708.  
  1709.  cmp.b #'s',mors
  1710.  beq.s nowaitslave
  1711.  
  1712. waitfortop:
  1713.  
  1714.  btst.b #0,intreqrl(a6)
  1715.  beq.b waitfortop
  1716.  
  1717.  move.w #$1,intreq(a6)
  1718. ; move.l #PLR1_GunData,GunData
  1719.  move.b PLR1_GunSelected,GunSelected
  1720.  bra waitmaster
  1721.  
  1722. nowaitslave:
  1723. ; move.l #PLR2_GunData,GunData
  1724.  move.b PLR2_GunSelected,GunSelected
  1725. waitmaster:
  1726.  
  1727.  move.l d0,d1
  1728.  move.l d1,d0
  1729.  move.w d0,pl1l
  1730.  swap d0
  1731.  move.w d0,pl1h
  1732.  
  1733.  add.l #10240,d1
  1734.  move.l d1,d0
  1735.  move.w d0,pl2l
  1736.  swap d0
  1737.  move.w d0,pl2h
  1738.  
  1739.  add.l #10240,d1
  1740.  move.l d1,d0
  1741.  move.w d0,pl3l
  1742.  swap d0
  1743.  move.w d0,pl3h
  1744.  
  1745.  add.l #10240,d1
  1746.  move.l d1,d0
  1747.  move.w d0,pl4l
  1748.  swap d0
  1749.  move.w d0,pl4h
  1750.  
  1751.  add.l #10240,d1
  1752.  move.l d1,d0
  1753.  move.w d0,pl5l
  1754.  swap d0
  1755.  move.w d0,pl5h
  1756.  
  1757.  add.l #10240,d1
  1758.  move.l d1,d0
  1759.  move.w d0,pl6l
  1760.  swap d0
  1761.  move.w d0,pl6h
  1762.  
  1763.  add.l #10240,d1
  1764.  move.l d1,d0
  1765.  move.w d0,pl7l
  1766.  swap d0
  1767.  move.w d0,pl7h
  1768.  
  1769.  add.l #10240,d1
  1770.  move.l d1,d0
  1771.  move.w d0,pl8l
  1772.  swap d0
  1773.  move.w d0,pl8h 
  1774.  
  1775.  move.l #SMIDDLEY,a0
  1776.  movem.l (a0)+,d0/d1
  1777.  move.l d0,MIDDLEY
  1778.  move.l d1,MIDDLEY+4
  1779.  
  1780.  move.l waterpt,a0
  1781.  move.l (a0)+,watertouse
  1782.  cmp.l #endwaterlist,a0
  1783.  blt.s okwat
  1784.  move.l #waterlist,a0
  1785. okwat:
  1786.  move.l a0,waterpt
  1787.  
  1788.  add.w #640,wtan
  1789.  and.w #8191,wtan
  1790.  add.l #1,wateroff
  1791.  and.l #$3fff3fff,wateroff
  1792.  
  1793.  move.l PLR1_xoff,OLDX1
  1794.  move.l PLR1_zoff,OLDZ1
  1795.  move.l PLR2_xoff,OLDX2
  1796.  move.l PLR2_zoff,OLDZ2
  1797.  
  1798.  move.l #$dff000,a6
  1799.  
  1800.  cmp.b #'s',mors
  1801.  beq ASlaveShouldWaitOnHisMaster
  1802.  
  1803.  cmp.b #'n',mors
  1804.  bne NotOnePlayer
  1805.  
  1806.  movem.l d0-d7/a0-a6,-(a7)
  1807.  
  1808.  moveq #0,d0
  1809.  move.b GunSelected,d0
  1810.  move.l LINKFILE,a6
  1811.  add.l #GunBulletTypes,a6
  1812.  move.w (a6,d0.w*8),d0
  1813.  
  1814.  move.l #PLAYERONEAMMO,a6
  1815.  move.w (a6,d0.w*2),d0
  1816.  move.w d0,Ammo
  1817.  movem.l (a7)+,d0-d7/a0-a6
  1818.  
  1819.  move.w PLAYERONEHEALTH,Energy
  1820.  
  1821.  move.w FramesToDraw,TempFrames
  1822.  cmp.w #15,TempFrames
  1823.  blt.s .okframe
  1824.  move.w #15,TempFrames
  1825. .okframe:
  1826.  move.w #0,FramesToDraw
  1827.  
  1828. *********************************************
  1829. *********** TAKE THIS OUT *******************
  1830. *********************************************
  1831.  
  1832.  move.l CHEATPTR,a4
  1833.  add.l #200000,a4
  1834.  moveq #0,d0
  1835.  move.b (a4),d0
  1836.  
  1837.  move.l #KeyMap,a5
  1838.  tst.b (a5,d0.w)
  1839.  beq.s .nocheat
  1840.  
  1841.  addq #1,a4
  1842.  cmp.l #ENDCHEAT,a4
  1843.  blt.s .nocheat
  1844.  cmp.w #0,CHEATNUM
  1845.  beq.s .nocheat
  1846.  sub.w #1,CHEATNUM
  1847.  move.l #CHEATFRAME,a4
  1848.  move.w #127,PLR1_energy
  1849.  jsr EnergyBar
  1850. .nocheat
  1851.  
  1852.  sub.l #200000,a4
  1853.  move.l a4,CHEATPTR
  1854.  
  1855. **********************************************
  1856. **********************************************
  1857. **********************************************
  1858.  
  1859.  move.l PLR1s_xoff,p1_xoff
  1860.  move.l PLR1s_zoff,p1_zoff
  1861.  move.l PLR1s_yoff,p1_yoff
  1862.  move.l PLR1s_height,p1_height
  1863.  move.w PLR1s_angpos,p1_angpos
  1864.  move.w PLR1_bobble,p1_bobble
  1865.  move.b PLR1_clicked,p1_clicked
  1866.  move.b PLR1_fire,p1_fire
  1867.  clr.b PLR1_clicked
  1868.  move.b PLR1_SPCTAP,p1_spctap
  1869.  clr.b PLR1_SPCTAP
  1870.  move.b PLR1_Ducked,p1_ducked
  1871.  move.b PLR1_GunSelected,p1_gunselected
  1872.  
  1873.  bsr PLR1_Control
  1874.  
  1875.  move.l PLR1_Roompt,a0
  1876.  move.l ToZoneRoof(a0),SplitHeight
  1877.  move.w p1_xoff,THISPLRxoff
  1878.  move.w p1_zoff,THISPLRzoff
  1879.  
  1880.  
  1881.  move.l #$60000,p2_yoff
  1882.  move.l PLR2_Obj,a0
  1883.  move.w #-1,GraphicRoom(a0)
  1884.  move.w #-1,12(a0)
  1885.  move.b #0,17(a0)
  1886.  move.l #BollocksRoom,PLR2_Roompt
  1887.  
  1888.  bra donetalking
  1889.  
  1890. NotOnePlayer:
  1891.  move.l #KeyMap,a5
  1892.  tst.b $19(a5)
  1893.  sne MASTERPAUSE
  1894.  
  1895. *********************************
  1896.  move.w PLAYERONEHEALTH,Energy
  1897. ; change this back
  1898. *********************************
  1899.  movem.l d0-d7/a0-a6,-(a7)
  1900.  
  1901.  moveq #0,d0
  1902.  move.b GunSelected,d0
  1903.  move.l LINKFILE,a6
  1904.  add.l #GunBulletTypes,a6
  1905.  move.w (a6,d0.w*8),d0
  1906.  
  1907.  move.l #PLAYERONEAMMO,a6
  1908.  move.w (a6,d0.w*2),d0
  1909.  move.w d0,Ammo
  1910.  movem.l (a7)+,d0-d7/a0-a6
  1911.  
  1912.  jsr SENDFIRST
  1913.  
  1914.  move.w FramesToDraw,TempFrames
  1915.  cmp.w #15,TempFrames
  1916.  blt.s .okframe
  1917.  move.w #15,TempFrames
  1918. .okframe:
  1919.  move.w #0,FramesToDraw
  1920.  
  1921.  move.l PLR1s_xoff,p1_xoff
  1922.  move.l PLR1s_zoff,p1_zoff
  1923.  move.l PLR1s_yoff,p1_yoff
  1924.  move.l PLR1s_height,p1_height
  1925.  move.w PLR1s_angpos,p1_angpos
  1926.  move.w PLR1_bobble,p1_bobble
  1927.  move.b PLR1_clicked,p1_clicked
  1928.  clr.b PLR1_clicked
  1929.  move.b PLR1_fire,p1_fire
  1930.  move.b PLR1_SPCTAP,p1_spctap
  1931.  clr.b PLR1_SPCTAP
  1932.  move.b PLR1_Ducked,p1_ducked
  1933.  move.b PLR1_GunSelected,p1_gunselected
  1934.  
  1935.  move.l PLR1_AIMSPD,d0
  1936.  jsr SENDFIRST
  1937.  move.l d0,PLR2_AIMSPD
  1938.  
  1939.  move.l p1_xoff,d0
  1940.  jsr SENDFIRST
  1941.  move.l d0,p2_xoff
  1942.  
  1943.  move.l p1_zoff,d0
  1944.  jsr SENDFIRST
  1945.  move.l d0,p2_zoff 
  1946.  
  1947.  move.l p1_yoff,d0
  1948.  jsr SENDFIRST
  1949.  move.l d0,p2_yoff
  1950.   
  1951.  move.l p1_height,d0
  1952.  jsr SENDFIRST
  1953.  move.l d0,p2_height
  1954.  
  1955.  move.w p1_angpos,d0
  1956.  swap d0
  1957.  move.w p1_bobble,d0
  1958.  jsr SENDFIRST
  1959.  move.w d0,p2_bobble
  1960.  swap d0
  1961.  move.w d0,p2_angpos
  1962.  
  1963.  
  1964.  move.w TempFrames,d0
  1965.  swap d0
  1966.  move.b p1_spctap,d0
  1967.  lsl.w #8,d0
  1968.  move.b p1_clicked,d0
  1969.  jsr SENDFIRST
  1970.  move.b d0,p2_clicked
  1971.  lsr.w #8,d0
  1972.  move.b d0,p2_spctap
  1973.  
  1974.  
  1975.  move.w Rand1,d0
  1976.  swap d0
  1977.  move.b p1_ducked,d0
  1978.  lsl.w #8,d0
  1979.  move.b p1_gunselected,d0
  1980.  jsr SENDFIRST
  1981.  move.b d0,p2_gunselected
  1982.  lsr.w #8,d0
  1983.  move.b d0,p2_ducked
  1984.  
  1985.  move.b p1_fire,d0
  1986.  lsl.w #8,d0
  1987.  move.b MASTERQUITTING,d0
  1988.  or.b d0,SLAVEQUITTING
  1989.  swap d0
  1990.  move.b MASTERPAUSE,d0
  1991.  or.b d0,SLAVEPAUSE
  1992.  jsr SENDFIRST
  1993.  or.b d0,MASTERPAUSE
  1994.  or.b d0,SLAVEPAUSE
  1995.  swap d0
  1996.  or.b d0,SLAVEQUITTING
  1997.  or.b d0,MASTERQUITTING
  1998.  lsr.w #8,d0
  1999.  move.b d0,p2_fire
  2000.  
  2001.  bsr PLR1_Control
  2002.  bsr PLR2_Control
  2003.  move.l PLR1_Roompt,a0
  2004.  move.l ToZoneRoof(a0),SplitHeight
  2005.  move.w p1_xoff,THISPLRxoff
  2006.  move.w p1_zoff,THISPLRzoff
  2007.  
  2008.  bra donetalking
  2009.  
  2010. ASlaveShouldWaitOnHisMaster:
  2011.  
  2012.  move.l #KeyMap,a5
  2013.  tst.b $19(a5)
  2014.  sne SLAVEPAUSE
  2015.  
  2016.  movem.l d0-d7/a0-a6,-(a7)
  2017.  
  2018.  moveq #0,d0
  2019.  move.b GunSelected,d0
  2020.  move.l LINKFILE,a6
  2021.  add.l #GunBulletTypes,a6
  2022.  move.w (a6,d0.w*8),d0
  2023.  
  2024.  move.l #PLAYERTWOAMMO,a6
  2025.  move.w (a6,d0.w*2),d0
  2026.  move.w d0,Ammo
  2027.  movem.l (a7)+,d0-d7/a0-a6
  2028.  
  2029.  move.w PLAYERTWOHEALTH,Energy
  2030.  
  2031.  jsr RECFIRST
  2032.  
  2033.  move.l PLR2s_xoff,p2_xoff
  2034.  move.l PLR2s_zoff,p2_zoff
  2035.  move.l PLR2s_yoff,p2_yoff
  2036.  move.l PLR2s_height,p2_height
  2037.  move.w PLR2s_angpos,p2_angpos
  2038.  move.w PLR2_bobble,p2_bobble
  2039.  move.b PLR2_clicked,p2_clicked
  2040.  clr.b PLR2_clicked
  2041.  move.b PLR2_fire,p2_fire
  2042.  move.b PLR2_SPCTAP,p2_spctap
  2043.  clr.b PLR2_SPCTAP
  2044.  move.b PLR2_Ducked,p2_ducked
  2045.  move.b PLR2_GunSelected,p2_gunselected
  2046.  
  2047.  move.l PLR2_AIMSPD,d0
  2048.  jsr RECFIRST
  2049.  move.l d0,PLR1_AIMSPD
  2050.  
  2051.  move.l p2_xoff,d0
  2052.  jsr RECFIRST
  2053.  move.l d0,p1_xoff
  2054.  
  2055.  move.l p2_zoff,d0
  2056.  jsr RECFIRST
  2057.  move.l d0,p1_zoff
  2058.  
  2059.  move.l p2_yoff,d0
  2060.  jsr RECFIRST
  2061.  move.l d0,p1_yoff
  2062.  
  2063.  move.l p2_height,d0
  2064.  jsr RECFIRST
  2065.  move.l d0,p1_height
  2066.  
  2067.  move.w p2_angpos,d0
  2068.  swap d0
  2069.  move.w p2_bobble,d0
  2070.  jsr RECFIRST
  2071.  move.w d0,p1_bobble
  2072.  swap d0
  2073.  move.w d0,p1_angpos
  2074.  
  2075.  
  2076.  move.b p2_spctap,d0
  2077.  lsl.w #8,d0
  2078.  move.b p2_clicked,d0
  2079.  jsr RECFIRST
  2080.  move.b d0,p1_clicked
  2081.  lsr.w #8,d0
  2082.  move.b d0,p1_spctap
  2083.  swap d0
  2084.  move.w d0,TempFrames
  2085.  
  2086.  move.b p2_ducked,d0
  2087.  lsl.w #8,d0
  2088.  move.b p2_gunselected,d0
  2089.  jsr RECFIRST
  2090.  move.b d0,p1_gunselected
  2091.  lsr.w #8,d0
  2092.  move.b d0,p1_ducked
  2093.  swap d0
  2094.  move.w d0,Rand1
  2095.  
  2096.  move.b p2_fire,d0
  2097.  lsl.w #8,d0
  2098.  move.b SLAVEQUITTING,d0
  2099.  or.b d0,MASTERQUITTING
  2100.  swap d0
  2101.  move.b SLAVEPAUSE,d0
  2102.  or.b d0,MASTERPAUSE
  2103.  jsr RECFIRST
  2104.  or.b d0,MASTERPAUSE
  2105.  or.b d0,SLAVEPAUSE
  2106.  swap d0
  2107.  or.b d0,SLAVEQUITTING
  2108.  or.b d0,MASTERQUITTING
  2109.  lsr.w #8,d0
  2110.  move.b d0,p1_fire
  2111.  
  2112.  
  2113.  bsr PLR1_Control
  2114.  bsr PLR2_Control
  2115.  move.w p2_xoff,THISPLRxoff
  2116.  move.w p2_zoff,THISPLRzoff
  2117.  move.l PLR2_Roompt,a0
  2118.  move.l ToZoneRoof(a0),SplitHeight
  2119.  
  2120. donetalking:
  2121.  
  2122.  
  2123.  move.l #ZoneBrightTable,a1
  2124.  move.l ZoneAdds,a2
  2125.  move.l PLR2_ListOfGraphRooms,a0
  2126. ; move.l PLR2_PointsToRotatePtr,a5
  2127.  move.l a0,a5
  2128.  cmp.b #'s',mors
  2129.  beq.s doallz
  2130.  move.l PLR1_ListOfGraphRooms,a0
  2131. ; move.l PLR1_PointsToRotatePtr,a5
  2132.  move.l a0,a5 
  2133. doallz
  2134.  move.w (a0),d0
  2135.  blt.s doneallz
  2136.  add.w #8,a0
  2137.  
  2138.  move.l (a2,d0.w*4),a3
  2139.  add.l LEVELDATA,a3
  2140.  move.w ToZoneBrightness(a3),d2
  2141.  
  2142.  blt.s justbright
  2143.  move.w d2,d3
  2144.  lsr.w #8,d3
  2145.  tst.b d3
  2146.  beq.s justbright
  2147.  
  2148.  move.l #BrightAnimTable,a4
  2149.  move.w -2(a4,d3.w*2),d2
  2150.  
  2151. justbright:
  2152.  muls #32,d2
  2153.  divs #20,d2
  2154.  move.w d2,(a1,d0.w*4)
  2155.  
  2156.  move.w ToUpperBrightness(a3),d2
  2157.  
  2158.  blt.s justbright2
  2159.  move.w d2,d3
  2160.  lsr.w #8,d3
  2161.  tst.b d3
  2162.  beq.s justbright2
  2163.  
  2164.  move.l #BrightAnimTable,a4
  2165.  move.w -2(a4,d3.w*2),d2
  2166.  
  2167. justbright2:
  2168.  
  2169.  muls #32,d2
  2170.  divs #20,d2
  2171.  move.w d2,2(a1,d0.w*4)
  2172.  
  2173.  bra doallz
  2174.  
  2175. doneallz:
  2176.  
  2177.  move.l PointBrights,a2
  2178.  move.l #CurrentPointBrights,a3
  2179. justtheone:
  2180.  move.w (a5),d0
  2181.  blt whythehell
  2182.  addq #8,a5
  2183.  
  2184.  muls #40,d0
  2185.  
  2186.  move.w #39,d7
  2187.  
  2188. allinzone:
  2189.  move.w (a2,d0.w*2),d2
  2190.  
  2191.  tst.b d2
  2192.  blt.s .justbright
  2193.  move.w d2,d3
  2194.  lsr.w #8,d3
  2195.  tst.b d3
  2196.  beq.s .justbright
  2197.  
  2198.  move.w d3,d4
  2199.  and.w #$f,d3
  2200.  lsr.w #4,d4
  2201.  add.w #1,d4
  2202.  move.l #BrightAnimTable,a0
  2203.  move.w -2(a0,d3.w*2),d3
  2204.  ext.w d2
  2205.  sub.w d2,d3
  2206.  muls d4,d3
  2207.  asr.w #4,d3
  2208.  add.w d3,d2
  2209.  
  2210. .justbright:
  2211.  ext.w d2
  2212.  
  2213.  muls #31,d2
  2214.  divs #20,d2
  2215.  bge.s .itspos
  2216.  sub.w #600,d2
  2217. .itspos:
  2218.  add.w #300,d2
  2219.  
  2220.  move.w d2,(a3,d0.w*2)
  2221.  addq #1,d0
  2222.  dbra d7,allinzone
  2223.  
  2224.  bra justtheone
  2225.  
  2226. whythehell:
  2227.  
  2228.  move.l PLR1_Roompt,a0
  2229.  move.l #CurrentPointBrights,a1
  2230.  move.l ZoneBorderPts,a2
  2231.  move.w (a0),d0
  2232.  muls #10,d0
  2233.  lea (a2,d0.w*2),a2
  2234.  lea (a1,d0.w*8),a1
  2235.  
  2236.  moveq #9,d7
  2237.  moveq #0,d0
  2238.  moveq #0,d1
  2239. findaverage:
  2240.  tst.w (a2)+
  2241.  blt.s .foundaverage
  2242.  addq #1,d0
  2243.  move.w (a1)+,d2
  2244.  bge.s .okpos
  2245.  neg.w d2
  2246. .okpos:
  2247.  add.w d2,d1
  2248.  
  2249.  dbra d7,findaverage
  2250.  
  2251. .foundaverage:
  2252.  
  2253.  ext.l d1
  2254.  divs d0,d1
  2255.  sub.w #300,d1
  2256.  move.w d1,PLR1_RoomBright
  2257.  
  2258.  cmp.b #'n',mors
  2259.  beq nosee
  2260.  
  2261.  move.l PLR1_Roompt,FromRoom
  2262.  move.l PLR2_Roompt,ToRoom
  2263.  move.w p1_xoff,Viewerx
  2264.  move.w p1_zoff,Viewerz
  2265.  move.l p1_yoff,d0
  2266.  asr.l #7,d0
  2267.  move.w d0,Viewery
  2268.  move.w p2_xoff,Targetx
  2269.  move.w p2_zoff,Targetz
  2270.  move.l p2_yoff,d0
  2271.  asr.l #7,d0
  2272.  move.w d0,Targety
  2273.  move.b PLR1_StoodInTop,ViewerTop
  2274.  move.b PLR2_StoodInTop,TargetTop
  2275.  jsr CanItBeSeen
  2276.  
  2277.  move.l PLR1_Obj,a0
  2278.  move.b CanSee,d0
  2279.  and.b #2,d0
  2280.  move.b d0,17(a0)
  2281.  move.l PLR2_Obj,a0
  2282.  move.b CanSee,d0
  2283.  and.b #1,d0
  2284.  move.b d0,17(a0)
  2285.  
  2286. nosee:
  2287.  
  2288.  
  2289.  move.w TempFrames,d0
  2290.  add.w d0,p1_holddown
  2291.  cmp.w #30,p1_holddown
  2292.  blt.s oklength
  2293.  move.w #30,p1_holddown
  2294. oklength:
  2295.  
  2296.  tst.b p1_fire
  2297.  bne.s okstillheld
  2298.  sub.w d0,p1_holddown
  2299.  bge.s okstillheld
  2300.  move.w #0,p1_holddown
  2301.  
  2302. okstillheld:
  2303.  
  2304.  move.w TempFrames,d0
  2305.  add.w d0,p2_holddown
  2306.  
  2307.  cmp.w #30,p2_holddown
  2308.  blt.s oklength2
  2309.  move.w #30,p2_holddown
  2310. oklength2:
  2311.  
  2312.  
  2313.  tst.b p2_fire
  2314.  bne.s okstillheld2
  2315.  sub.w d0,p2_holddown
  2316.  bge.s okstillheld2
  2317.  move.w #0,p2_holddown
  2318. okstillheld2:
  2319.  
  2320. ***** CHECKING LIGHT *********
  2321.  
  2322. ; move.w #-20,d0
  2323. ; move.w PLR1_xoff,d1
  2324. ; move.w PLR1_zoff,d2
  2325. ; move.l PLR1_Roompt,a0
  2326. ; move.w (a0),d3
  2327. ; move.w PLR1_angpos,d4
  2328. ;
  2329. ; jsr BRIGHTENPOINTSANGLE
  2330.  
  2331. ******************************
  2332.  
  2333. ; move.l #PLR1_GunData,a1
  2334. ; move.w p1_holddown,d0
  2335. ; move.w #50,10+32*3(a1)
  2336. ; move.l #PLR2_GunData,a1
  2337. ; move.w p2_holddown,d0
  2338. ; move.w #50,10+32*3(a1)
  2339.  
  2340. ******************************************
  2341. ******************************************
  2342.  
  2343.  move.w TempFrames,d1
  2344.  bgt.s noze
  2345.  moveq #1,d1
  2346. noze:
  2347.  
  2348.  move.w PLR1_xoff,d0
  2349.  sub.w OLDX1,d0
  2350.  asl.w #4,d0
  2351.  ext.l d0
  2352.  divs d1,d0
  2353.  move.w d0,XDIFF1
  2354.  move.w PLR2_xoff,d0
  2355.  sub.w OLDX2,d0
  2356.  asl.w #4,d0
  2357.  ext.l d0
  2358.  divs d1,d0
  2359.  move.w d0,XDIFF2
  2360.  move.w PLR1_zoff,d0
  2361.  sub.w OLDZ1,d0
  2362.  asl.w #4,d0
  2363.  ext.l d0
  2364.  divs d1,d0
  2365.  move.w d0,ZDIFF1
  2366.  move.w PLR2_zoff,d0
  2367.  sub.w OLDZ2,d0
  2368.  asl.w #4,d0
  2369.  ext.l d0
  2370.  divs d1,d0
  2371.  move.w d0,ZDIFF2
  2372.  
  2373.  cmp.b #'s',mors
  2374.  beq.s ImPlayer2OhYesIAm
  2375.  bsr USEPLR1
  2376.  bra IWasPlayer1
  2377.  
  2378. ImPlayer2OhYesIAm:
  2379.  bsr USEPLR2
  2380. IWasPlayer1:
  2381.  
  2382.  
  2383.  cmp.b #'s',mors
  2384.  beq drawplayer2
  2385.  
  2386.  move.w #0,scaleval
  2387.  
  2388.  move.l PLR1_xoff,xoff
  2389.  move.l PLR1_yoff,yoff
  2390.  move.l PLR1_zoff,zoff
  2391.  move.w PLR1_angpos,angpos
  2392.  move.w PLR1_cosval,cosval
  2393.  move.w PLR1_sinval,sinval
  2394.  
  2395.  
  2396.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  2397.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  2398.  move.l PLR1_Roompt,Roompt
  2399.  
  2400.  move.l #KeyMap,a5
  2401.  moveq #0,d5
  2402.  move.b look_behind_key,d5
  2403.  tst.b (a5,d5.w)
  2404.  beq.s .nolookback
  2405.  
  2406.  move.l PLR1_Obj,a0
  2407.  move.w #-1,12+128(a0)
  2408.  
  2409.  eor.w #4096,angpos 
  2410.  neg.w cosval
  2411.  neg.w sinval
  2412. .nolookback:
  2413.  
  2414.  bsr OrderZones
  2415.  jsr objmoveanim
  2416.  jsr EnergyBar
  2417.  
  2418.  
  2419.  jsr AmmoBar
  2420.  
  2421. ;********************************************
  2422. ;************* Do reflection ****************
  2423. ;
  2424. ; move.l ListOfGraphRooms,a0
  2425. ; move.l ZoneAdds,a1
  2426. ;checkwaterheights
  2427. ; move.w (a0),d0
  2428. ; blt allzonesdone
  2429. ; addq #8,a0
  2430. ; move.l (a1,d0.w*4),a2
  2431. ; add.l LEVELDATA,a2
  2432. ; move.l ToZoneWater(a2),d0
  2433. ; cmp.l ToZoneFloor(a2),d0
  2434. ; blt.s WEHAVEAHEIGHT
  2435. ; bra.s checkwaterheights
  2436. ;
  2437. ;WEHAVEAHEIGHT:
  2438. ;
  2439. ; sub.l yoff,d0
  2440. ; blt.s underwater
  2441. ; add.l d0,d0
  2442. ; add.l d0,yoff
  2443. ; move.l FASTBUFFER2,FASTBUFFER
  2444. ; move.w #0,leftclip
  2445. ; move.w RIGHTX,rightclip
  2446. ; move.w #0,deftopclip
  2447. ; move.w #BOTTOMY/2,defbotclip
  2448. ; move.w #0,topclip
  2449. ; move.w #BOTTOMY/2,botclip
  2450. ;
  2451. ; clr.b DOANYWATER 
  2452. ; bsr DrawDisplay
  2453. ;allzonesdone:
  2454. ;underwater:
  2455.  
  2456. ********************************************
  2457.  
  2458.  st DOANYWATER
  2459.  
  2460.  move.l PLR1_yoff,yoff
  2461.  
  2462.  move.w #0,leftclip
  2463.  move.w RIGHTX,rightclip
  2464.  move.w #0,deftopclip
  2465.  move.w WIDESCRN,d0
  2466.  add.w d0,deftopclip
  2467.  
  2468.  move.w BOTTOMY,defbotclip
  2469.  sub.w d0,defbotclip
  2470.  move.w #0,topclip
  2471.  add.w d0,topclip
  2472.  move.w BOTTOMY,botclip
  2473.  sub.w d0,botclip
  2474. ; sub.l #10*104*4,frompt
  2475. ; sub.l #10*104*4,midpt
  2476.  
  2477. * Subroom loop
  2478.  
  2479.  bsr DrawDisplay 
  2480.  
  2481.  bra nodrawp2
  2482.  
  2483. drawplayer2
  2484.  
  2485.  move.w #0,scaleval
  2486.  move.l PLR2_xoff,xoff
  2487.  move.l PLR2_yoff,yoff
  2488.  move.l PLR2_zoff,zoff
  2489.  move.w PLR2_angpos,angpos
  2490.  move.w PLR2_cosval,cosval
  2491.  move.w PLR2_sinval,sinval 
  2492.  
  2493.  
  2494.  
  2495.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  2496.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  2497.  move.l PLR2_Roompt,Roompt
  2498.  
  2499.  move.l #KeyMap,a5
  2500.  moveq #0,d5
  2501.  move.b look_behind_key,d5
  2502.  tst.b (a5,d5.w)
  2503.  beq.s .nolookback
  2504.  
  2505.  move.l PLR1_Obj,a0
  2506.  move.w #-1,12+128(a0)
  2507.  eor.w #4096,angpos 
  2508.  
  2509.  neg.w cosval
  2510.  neg.w sinval
  2511. .nolookback:
  2512.  
  2513.  bsr OrderZones
  2514.  jsr objmoveanim
  2515.  jsr EnergyBar
  2516.  jsr AmmoBar
  2517.  
  2518.  move.w WIDESCRN,d0
  2519.  
  2520.  move.w #0,leftclip
  2521.  move.w RIGHTX,rightclip
  2522.  move.w #0,deftopclip
  2523.  add.w d0,deftopclip
  2524.  move.w BOTTOMY,defbotclip
  2525.  sub.w d0,defbotclip
  2526.  move.w #0,topclip
  2527.  add.w d0,topclip
  2528.  move.w BOTTOMY,botclip
  2529.  sub.w d0,botclip
  2530.  
  2531.  bsr DrawDisplay
  2532.  
  2533. nodrawp2:
  2534.  
  2535. ***************************************** 
  2536. * Copy from copbuff to chip ram
  2537.  
  2538.  
  2539. ; move.l drawpt,a3
  2540. ; adda.w #10,a3
  2541. ; move.l COPSCRNBUFF,a2
  2542. ; move.w #2,d6
  2543. ; adda.w #10,a2
  2544. ;COPYOUT
  2545. ; move.w #31,d0
  2546. ;COPYDOWN1:
  2547. ; move.w #3,d1
  2548. ; move.l a2,a4
  2549. ; move.l a3,a5
  2550. ;.inlop1:
  2551. ;val SET 0
  2552. ; REPT 20
  2553. ; move.w val(a4),val(a5)
  2554. ;val SET val+104*4
  2555. ; ENDR
  2556. ; adda.l #104*4*20,a4
  2557. ; adda.l #104*4*20,a5
  2558. ; dbra d1,.inlop1
  2559. ; addq #4,a2
  2560. ; addq #4,a3
  2561. ; dbra d0,COPYDOWN1
  2562. ; addq #4,a2
  2563. ; addq #4,a3
  2564. ; dbra d6,COPYOUT 
  2565.  
  2566.  tst.b REALMAPON
  2567.  beq.s .nomap
  2568.  bsr DoTheMapWotNastyCharlesIsForcingMeToDo
  2569. .nomap
  2570.  
  2571.  move.w WIDESCRN,d7
  2572.  
  2573.  tst.b FULLSCR
  2574.  beq nobigconv
  2575.  
  2576.  move.l FASTBUFFER,a0
  2577. ; add.l #320*2*20,a0
  2578.  move.w d7,d6
  2579.  muls #320,d6
  2580.  add.l d6,a0
  2581.  move.l SCRNDRAWPT,a1
  2582.  move.w d7,d6
  2583.  muls #40,d6
  2584.  add.l d6,a1
  2585.  add.l #2,a1
  2586.  move.l #(288/8)-1,d0
  2587.  move.l #231,d1
  2588.  sub.w d7,d1
  2589.  sub.w d7,d1
  2590.  blt nochunk
  2591.  move.w #(320-288),d2
  2592.  move.w #4,d3
  2593.  
  2594.  bra donebigconv
  2595.  
  2596. nobigconv:
  2597.  
  2598.  move.l FASTBUFFER,a0
  2599.  move.w d7,d6
  2600.  muls #320,d6
  2601.  add.l d6,a0
  2602.  move.l SCRNDRAWPT,a1
  2603.  add.l #8+40*20,a1
  2604.  move.w d7,d6
  2605.  muls #40,d6
  2606.  add.l d6,a1
  2607.  move.l #(192/8)-1,d0
  2608.  move.l #159,d1
  2609.  sub.w d7,d1
  2610.  sub.w d7,d1
  2611.  blt nochunk
  2612.  move.w #(320-192),d2
  2613.  move.w #16,d3
  2614. donebigconv
  2615.  
  2616.  tst.b DOUBLEHEIGHT
  2617.  beq.s .nodoub
  2618.  asr.w #1,d1
  2619.  blt nochunk
  2620.  add.w #320,d2
  2621.  add.w #40,d3
  2622. .nodoub:
  2623.  
  2624.  move.b DOUBLEWIDTH,d4
  2625.  
  2626.  move.b PLR1_TELEPORTED,d5
  2627.  clr.b PLR1_TELEPORTED
  2628.  cmp.b #'s',mors
  2629.  bne.s .notplr2
  2630.  move.b PLR2_TELEPORTED,d5
  2631.  clr.b PLR2_TELEPORTED
  2632. .notplr2
  2633.  jsr CHUNKYTOPLANAR 
  2634.  
  2635. nochunk:
  2636.  
  2637.  move.l #KeyMap,a5
  2638.  tst.b $4a(a5)
  2639.  beq .nosmallscr
  2640.  
  2641.  move.l #0,d7
  2642.  move.l #0,d6
  2643.  tst.b FULLSCR
  2644.  bne.s .attop
  2645.  move.l #40*20,d7
  2646.  move.l #40*52,d6
  2647. .attop:
  2648.  
  2649.  move.w WIDESCRN,d0
  2650.  move.l SCRNDRAWPT,a0
  2651.  add.l d7,a0
  2652.  muls #40,d0
  2653.  add.l d0,a0
  2654.  bsr CLRTWOLINES
  2655.  move.w WIDESCRN,d0
  2656.  move.l SCRNSHOWPT,a0
  2657.  add.l d7,a0
  2658.  muls #40,d0
  2659.  add.l d0,a0
  2660.  bsr CLRTWOLINES
  2661.  
  2662.  add.w #2,WIDESCRN
  2663.  
  2664.  move.l SCRNDRAWPT,a0
  2665.  add.l #232*40,a0
  2666.  sub.l d6,a0
  2667.  move.w WIDESCRN,d0
  2668.  muls #40,d0
  2669.  sub.l d0,a0
  2670.  bsr CLRTWOLINES
  2671.  move.l SCRNSHOWPT,a0
  2672.  sub.l d6,a0
  2673.  add.l #232*40,a0
  2674.  move.w WIDESCRN,d0
  2675.  muls #40,d0
  2676.  sub.l d0,a0
  2677.  bsr CLRTWOLINES
  2678.  
  2679. .nosmallscr
  2680.  
  2681.  tst.b $5e(a5)
  2682.  beq.s .nobigscr
  2683.  tst.w WIDESCRN
  2684.  ble.s .nobigscr
  2685.  
  2686.  sub.w #2,WIDESCRN
  2687.  
  2688. .nobigscr
  2689.  
  2690.  
  2691.  tst.b (a5)
  2692.  beq.s .nosavescrn
  2693.  
  2694.  not.b USEDOUG
  2695.  
  2696.  jsr SAVETHESCREEN
  2697.  
  2698. .nosavescrn:
  2699.  
  2700.  tst.b $5b(a5)
  2701.  beq notdoubheight
  2702.  tst.b LASTDH
  2703.  bne notdoubheight2
  2704.  move.l SCRNSHOWPT,a0
  2705.  jsr WIPEDISPLAY
  2706.  move.l SCRNDRAWPT,a0
  2707.  jsr WIPEDISPLAY
  2708.  st LASTDH 
  2709.  
  2710.  move.w #0,d0
  2711.  move.w #0,d1
  2712.  
  2713.  not.b DOUBLEHEIGHT
  2714.  beq.s singlepixheight
  2715.  move.w #-40,d0
  2716.  move.w #40,d1
  2717.  
  2718. singlepixheight:
  2719.  
  2720.  move.l #SCRMODULOS,a0
  2721.  move.w #115,d2
  2722. putinmode:
  2723.  move.w d0,6(a0)
  2724.  move.w d0,6+4(a0)
  2725.  move.w d1,6+16(a0)
  2726.  move.w d1,6+16+4(a0)
  2727.  add.w #32,a0
  2728.  dbra d2,putinmode
  2729.  
  2730.  bra notdoubheight2
  2731.  
  2732. notdoubheight:
  2733.  clr.b LASTDH
  2734. notdoubheight2
  2735.  
  2736.  tst.b $5a(a5)
  2737.  beq.s notdoubwidth
  2738.  tst.b LASTDW
  2739.  bne notdoubwidth2
  2740.  move.l SCRNSHOWPT,a0
  2741.  jsr WIPEDISPLAY
  2742.  move.l SCRNDRAWPT,a0
  2743.  jsr WIPEDISPLAY
  2744.  st LASTDW
  2745.  not.b DOUBLEWIDTH
  2746.  bra.s notdoubwidth2
  2747.  
  2748. notdoubwidth:
  2749.  clr.b LASTDW
  2750. notdoubwidth2:
  2751.  
  2752. ***************************************** 
  2753.  move.l PLR2_Roompt,a0
  2754.  move.l #WorkSpace,a1
  2755.  clr.l (a1)
  2756.  clr.l 4(a1)
  2757.  clr.l 8(a1)
  2758.  clr.l 12(a1)
  2759.  clr.l 16(a1)
  2760.  clr.l 20(a1)
  2761.  clr.l 24(a1)
  2762.  clr.l 28(a1)
  2763.  
  2764.  cmp.b #'n',mors
  2765.  beq.s plr1only
  2766.  
  2767.  lea ToListOfGraph(a0),a0
  2768. .doallrooms:
  2769.  move.w (a0),d0
  2770.  blt.s .allroomsdone
  2771.  addq #8,a0
  2772.  move.w d0,d1
  2773.  asr.w #3,d0
  2774.  bset d1,(a1,d0.w)
  2775.  bra .doallrooms
  2776. .allroomsdone:
  2777.  
  2778. plr1only:
  2779.  
  2780.  move.l PLR1_Roompt,a0
  2781.  lea ToListOfGraph(a0),a0
  2782. .doallrooms2:
  2783.  move.w (a0),d0
  2784.  blt.s .allroomsdone2
  2785.  addq #8,a0
  2786.  move.w d0,d1
  2787.  asr.w #3,d0
  2788.  bset d1,(a1,d0.w)
  2789.  bra .doallrooms2
  2790. .allroomsdone2:
  2791.  
  2792.  move.l #%000001,d7
  2793.  lea TEAMWORK,a2
  2794.  move.l ObjectData,a0
  2795.  sub.w #64,a0
  2796. .doallobs:
  2797.  add.w #64,a0
  2798.  move.w (a0),d0
  2799.  blt.s .allobsdone
  2800.  move.w 12(a0),d0
  2801.  blt.s .doallobs
  2802.  move.w d0,d1
  2803.  asr.w #3,d0
  2804.  btst d1,(a1,d0.w)
  2805.  bne.s .worryobj
  2806.  move.b 16(a0),d0
  2807.  btst d0,d7
  2808.  beq.s .doallobs
  2809.  moveq #0,d0
  2810.  move.b teamnumber(a0),d0
  2811.  blt.s .doallobs
  2812.  asl.w #4,d0
  2813.  tst.w SEENBY(a2,d0.w)
  2814.  blt.s .doallobs
  2815. .worryobj:
  2816.  or.b #127,worry(a0)
  2817.  bra.s .doallobs
  2818. .allobsdone:
  2819.  
  2820.  
  2821.  
  2822. ; move.l #brightentab,a0
  2823. ; move.l frompt,a3
  2824. ; adda.w #(4*33)+(104*4*20),a3
  2825. ; move.w #20,d7
  2826. ; move.w #20,d6
  2827. ;horl:
  2828. ; move.w d6,d5
  2829. ; move.l a3,a1
  2830. ;vertl
  2831. ; move.w (a1),d0
  2832. ; move.w (a0,d0.w*2),(a1)
  2833. ; addq #4,a1
  2834. ; dbra d5,vertl
  2835. ; adda.w #104*4,a3
  2836. ; dbra d7,horl
  2837.  
  2838.  move.l #$dff000,a6
  2839.  
  2840. ; move.w #$300,col0(a6)
  2841.  
  2842.  move.l #KeyMap,a5
  2843.  tst.b $45(a5)
  2844.  beq.s noend
  2845.  
  2846.  cmp.b #'s',mors
  2847.  beq plr2quit 
  2848.  
  2849.  st MASTERQUITTING
  2850.  bra noend
  2851.  
  2852. plr2quit:
  2853.  st SLAVEQUITTING
  2854. noend:
  2855.  
  2856.  tst.b MASTERQUITTING
  2857.  beq.s .noquit
  2858.  tst.b SLAVEQUITTING
  2859.  beq.s .noquit
  2860.  jmp endnomusic
  2861. .noquit
  2862.  
  2863.  cmp.b #'n',mors
  2864.  bne.s noexit
  2865.  move.l PLR1_Roompt,a0
  2866.  move.w (a0),d0
  2867. ; move.w PLOPT,d1
  2868. ; move.l #ENDZONES,a0
  2869. ; cmp.w (a0,d1.w*2),d0
  2870.  
  2871.  cmp.w ENDZONE,d0
  2872.  
  2873. ; change this for quick exit, charlie
  2874. zzzz:
  2875. ; bra end
  2876.  
  2877.  bne.s noexit
  2878.  jmp end
  2879. noexit:
  2880.  
  2881. ; tst.w PLAYERONEHEALTH
  2882. ; bgt nnoend1
  2883. ; jmp end
  2884. ;nnoend1:
  2885. ; tst.w PLAYERTWOHEALTH
  2886. ; bgt nnoend2
  2887. ; jmp end
  2888. ;nnoend2:
  2889.  
  2890. ; move.l SwitchData,a0
  2891. ; tst.b 24+8(a0)
  2892. ; bne end
  2893.   
  2894. ; JSR STOPTIMER
  2895.  
  2896.  
  2897.  bra lop
  2898.  
  2899.  include "ab3:source_4000/ab3diipatchidr.s"
  2900.  
  2901. CLRTWOLINES:
  2902.  
  2903.  moveq #0,d1
  2904.  move.w #7,d2
  2905. .ccc
  2906.  move.l d1,2(a0)
  2907.  move.l d1,6(a0)
  2908.  move.l d1,10(a0)
  2909.  move.l d1,14(a0)
  2910.  move.l d1,18(a0)
  2911.  move.l d1,22(a0)
  2912.  move.l d1,26(a0)
  2913.  move.l d1,30(a0)
  2914.  move.l d1,34(a0)
  2915.  move.l d1,2+40(a0)
  2916.  move.l d1,6+40(a0)
  2917.  move.l d1,10+40(a0)
  2918.  move.l d1,14+40(a0)
  2919.  move.l d1,18+40(a0)
  2920.  move.l d1,22+40(a0)
  2921.  move.l d1,26+40(a0)
  2922.  move.l d1,30+40(a0)
  2923.  move.l d1,34+40(a0)
  2924.  add.l #10240,a0
  2925.  dbra d2,.ccc
  2926.  rts
  2927.  
  2928.  
  2929. LASTDH: dc.b 0
  2930. LASTDW: dc.b 0
  2931. WIDESCRN: dc.w 0
  2932. TRRANS: dc.w 0
  2933. DOANYWATER: dc.w 0
  2934.  
  2935. DoTheMapWotNastyCharlesIsForcingMeToDo:
  2936.  
  2937.  move.l #SHADINGTABLE,a4
  2938. ; add.w MAPBRIGHT,a4
  2939.  
  2940.  move.l #KeyMap,a5
  2941.  tst.b $50(a5)
  2942.  beq.s .nobrighter
  2943.  tst.w MAPBRIGHT
  2944.  beq.s .nobrighter
  2945.  
  2946.  sub.w #1,MAPBRIGHT
  2947.  
  2948. .nobrighter:
  2949.  
  2950.  tst.b $51(a5)
  2951.  beq.s .nodimmer
  2952.  cmp.w #7,MAPBRIGHT
  2953.  bge.s .nodimmer
  2954.  
  2955.  add.w #1,MAPBRIGHT
  2956.  
  2957. .nodimmer:
  2958.  
  2959.  move.l #Rotated,a1
  2960.  move.l #COMPACTMAP,a2
  2961.  move.l #BIGMAP-40,a3
  2962.  
  2963. preshow:
  2964.  add.w #40,a3
  2965.  
  2966. SHOWMAP:
  2967.  move.l (a2)+,d5
  2968.  move.l a2,d7
  2969.  cmp.l LASTZONE,d7
  2970.  bgt shownmap
  2971.  
  2972.  tst.l d5
  2973.  beq.s preshow
  2974.  
  2975.  move.w #9,d7
  2976. wallsofzone
  2977.  
  2978.  asr.l #1,d5
  2979.  bcs.s WALLSEEN
  2980.  
  2981.  asr.l #1,d5
  2982.  bcs.s WALLMAPPED
  2983.  
  2984.  asr.l #1,d5
  2985.  addq #4,a3
  2986.  bra.s DECIDEDWALL
  2987.  
  2988. WALLMAPPED:
  2989.  move.w #$b00,d4
  2990.  asr.l #1,d5
  2991.  bcc.s .notadoor
  2992.  move.w #$e00,d4
  2993. .notadoor
  2994.  
  2995.  st TRRANS
  2996.  
  2997.  bra.s DECIDEDCOLOUR
  2998.  
  2999. WALLSEEN:
  3000.  
  3001.  clr.b TRRANS
  3002.  
  3003.  move.w #255,d4
  3004.  asr.l #2,d5
  3005.  bcc.s .notadoor
  3006.  move.w #254,d4
  3007. .notadoor
  3008. DECIDEDCOLOUR:
  3009.  move.w (a3)+,d6
  3010.  move.l (a1,d6.w*8),d0
  3011.  asr.l #7,d0
  3012.  add.w mapxoff,d0
  3013.  move.w 6(a1,d6.w*8),d1
  3014.  add.w mapzoff,d1
  3015.  move.w (a3)+,d6
  3016.  move.l (a1,d6.w*8),d2
  3017.  asr.l #7,d2
  3018.  add.w mapxoff,d2
  3019.  move.w 6(a1,d6.w*8),d3
  3020.  add.w mapzoff,d3
  3021.  
  3022.  neg.w d1
  3023.  neg.w d3
  3024.  
  3025.  movem.l d7/d5,-(a7)
  3026.  bsr CLIPANDDRAW
  3027.  movem.l (a7)+,d7/d5
  3028.  
  3029. DECIDEDWALL:
  3030.  
  3031.  dbra d7,wallsofzone
  3032.  bra SHOWMAP
  3033.  
  3034. shownmap:
  3035.  
  3036.  clr.b TRRANS
  3037.  
  3038.  move.w mapxoff,d0
  3039.  move.w mapzoff,d1
  3040.  neg.w d1
  3041.  move.w d0,d2
  3042.  move.w d1,d3
  3043.  sub.w #128,d1
  3044.  add.w #128,d3
  3045.  move.w #250,d4
  3046.  bsr CLIPANDDRAW
  3047.  
  3048.  move.w mapxoff,d0
  3049.  move.w mapzoff,d1
  3050.  neg.w d1
  3051.  move.w d0,d2
  3052.  move.w d1,d3
  3053.  sub.w #128,d1
  3054.  sub.w #32,d3
  3055.  sub.w #64,d2
  3056.  move.w #250,d4
  3057.  bsr CLIPANDDRAW
  3058.  
  3059.  move.w mapxoff,d0
  3060.  move.w mapzoff,d1
  3061.  neg.w d1
  3062.  move.w d0,d2
  3063.  move.w d1,d3
  3064.  sub.w #128,d1
  3065.  sub.w #32,d3
  3066.  add.w #64,d2
  3067.  move.w #250,d4
  3068.  bsr CLIPANDDRAW
  3069.  rts
  3070.  
  3071.  
  3072. CLIPANDDRAW:
  3073.  
  3074.  tst.b FULLSCR
  3075.  beq.s .nodov
  3076.  
  3077.  add.w d0,d0
  3078.  add.w d2,d2
  3079.  ext.l d0
  3080.  ext.l d2
  3081.  divs #3,d0
  3082.  divs #3,d2
  3083.  
  3084. .nodov:
  3085.  
  3086.  move.w MAPBRIGHT,d5
  3087.  asr.w d5,d0
  3088.  asr.w d5,d1
  3089.  asr.w d5,d2
  3090.  asr.w d5,d3
  3091.  
  3092. NOSCALING:
  3093.  add.w #96,d0
  3094.  bge p1xpos
  3095.  
  3096.  add.w #96,d2
  3097.  blt OFFSCREEN
  3098.  
  3099. x1nx2p:
  3100.  
  3101.  move.w d3,d5
  3102.  sub.w d1,d5
  3103.  move.w d2,d6
  3104.  sub.w d0,d6
  3105.  beq OFFSCREEN
  3106.  
  3107.  muls d0,d5
  3108.  divs d6,d5
  3109.  sub.w d5,d1
  3110.  move.w #0,d0
  3111.  
  3112.  bra doneleftclip
  3113.  
  3114. p1xpos:
  3115.  
  3116.  add.w #96,d2
  3117.  bge doneleftclip
  3118.  
  3119.  move.w d1,d5
  3120.  sub.w d3,d5
  3121.  move.w d0,d6
  3122.  sub.w d2,d6
  3123.  beq OFFSCREEN
  3124.  
  3125.  muls d2,d5
  3126.  divs d6,d5
  3127.  sub.w d5,d3
  3128.  move.w #0,d2
  3129.  
  3130. doneleftclip:
  3131.  
  3132.  cmp.w #191,d0
  3133.  ble p1xneg
  3134.  
  3135.  cmp.w #191,d2
  3136.  bgt OFFSCREEN
  3137.  
  3138.  move.w d0,d6
  3139.  sub.w d2,d6
  3140.  beq OFFSCREEN
  3141.  sub.w #191,d0
  3142.  move.w d3,d5
  3143.  sub.w d1,d5
  3144.  
  3145.  muls d5,d0
  3146.  divs d6,d0
  3147.  add.w d0,d1
  3148.  move.w #191,d0
  3149.  
  3150.  bra donerightclip
  3151.  
  3152. p1xneg:
  3153.  
  3154.  cmp.w #191,d2
  3155.  ble donerightclip
  3156.  
  3157.  move.w d2,d6
  3158.  sub.w d0,d6
  3159.  beq OFFSCREEN
  3160.  sub.w #191,d2
  3161.  move.w d1,d5
  3162.  sub.w d3,d5
  3163.  
  3164.  muls d5,d2
  3165.  divs d6,d2
  3166.  add.w d2,d3
  3167.  move.w #191,d2
  3168.  
  3169. donerightclip:
  3170.  
  3171. *********************************
  3172.  
  3173.  add.w #80,d1
  3174.  bge p1ypos
  3175.  
  3176.  add.w #80,d3
  3177.  blt OFFSCREEN
  3178.  
  3179.  move.w d2,d5
  3180.  sub.w d0,d5
  3181.  move.w d3,d6
  3182.  sub.w d1,d6
  3183.  beq OFFSCREEN
  3184.  
  3185.  muls d1,d5
  3186.  divs d6,d5
  3187.  sub.w d5,d0
  3188.  move.w #0,d1
  3189.  
  3190.  bra donetopclip
  3191.  
  3192. p1ypos:
  3193.  
  3194.  add.w #80,d3
  3195.  bge donetopclip
  3196.  
  3197.  move.w d0,d5
  3198.  sub.w d2,d5
  3199.  move.w d1,d6
  3200.  sub.w d3,d6
  3201.  beq OFFSCREEN
  3202.  
  3203.  muls d3,d5
  3204.  divs d6,d5
  3205.  sub.w d5,d2
  3206.  move.w #0,d3
  3207.  
  3208. donetopclip:
  3209.  
  3210.  cmp.w #159,d1
  3211.  ble p1yneg
  3212.  
  3213.  cmp.w #159,d3
  3214.  bgt OFFSCREEN
  3215.  
  3216.  move.w d1,d6
  3217.  sub.w d3,d6
  3218.  beq OFFSCREEN
  3219.  sub.w #159,d1
  3220.  move.w d2,d5
  3221.  sub.w d0,d5
  3222.  
  3223.  muls d5,d1
  3224.  divs d6,d1
  3225.  add.w d1,d0
  3226.  move.w #159,d1
  3227.  
  3228.  bra donebotclip
  3229.  
  3230. p1yneg:
  3231.  
  3232.  cmp.w #159,d3
  3233.  ble donebotclip
  3234.  
  3235.  move.w d3,d6
  3236.  sub.w d1,d6
  3237.  beq OFFSCREEN
  3238.  sub.w #159,d3
  3239.  move.w d0,d5
  3240.  sub.w d2,d5
  3241.  
  3242.  muls d5,d3
  3243.  divs d6,d3
  3244.  add.w d3,d2
  3245.  move.w #159,d3
  3246.  
  3247. donebotclip:
  3248.  
  3249.  tst.b TRRANS
  3250.  bne DRAWAtransLINE
  3251.  bra DRAWAMAPLINE
  3252.  
  3253. OFFSCREEN:
  3254. NOLINEtrans:
  3255.  rts
  3256.  
  3257. MAPBRIGHT:
  3258.  dc.w 3
  3259. mapxoff: dc.w 0
  3260. mapzoff: dc.w 0
  3261.  
  3262. DRAWAtransLINE:
  3263.  
  3264.  move.l FASTBUFFER,a0    ; screen to render to.
  3265.  
  3266.  tst.b FULLSCR
  3267.  beq.s .nooffset
  3268.   
  3269.  add.l #(320*40)+(48*2),a0
  3270.   
  3271. .nooffset:
  3272.  
  3273.  cmp.w d1,d3
  3274.  bgt.s .okdown
  3275.  bne.s .aline
  3276.  cmp.w d0,d2
  3277.  beq.s NOLINEtrans 
  3278. .aline
  3279.  exg d0,d2
  3280.  exg d1,d3
  3281. .okdown
  3282.  
  3283.  move.w d1,d5
  3284.  muls #320,d5
  3285.  add.l d5,a0
  3286.  lea (a0,d0.w*2),a0
  3287.  
  3288.  sub.w d1,d3
  3289.  
  3290.  sub.w d0,d2
  3291.  bge.s downrighttrans
  3292.  
  3293. downlefttrans:
  3294.  neg.w d2
  3295.  cmp.w d2,d3
  3296.  bgt.s downmorelefttrans
  3297.  
  3298. downleftmoretrans:
  3299.  move.w #320,d6
  3300.  move.w d2,d0
  3301.  move.w d2,d7
  3302.  
  3303. .linelop:
  3304.  move.b (a0),d4
  3305.  move.b (a4,d4.w*2),(a0)
  3306.  subq #1,a0
  3307.  sub.w d3,d0
  3308.  bgt.s .noextra
  3309.  add.w d2,d0
  3310.  add.w d6,a0
  3311. .noextra:
  3312.  dbra d7,.linelop
  3313.  rts
  3314.  
  3315. downmorelefttrans:
  3316.  move.w #320,d6
  3317.  move.w d3,d0
  3318.  move.w d3,d7
  3319.  
  3320. .linelop:
  3321.  move.b (a0),d4
  3322.  move.b (a4,d4.w*2),(a0)
  3323.  add.w d6,a0
  3324.  sub.w d2,d0
  3325.  bgt.s .noextra
  3326.  add.w d3,d0
  3327.  subq #1,a0
  3328. .noextra:
  3329.  dbra d7,.linelop
  3330.  
  3331.  rts
  3332.  
  3333. downrighttrans:
  3334.  
  3335.  cmp.w d2,d3
  3336.  bgt.s downmorerighttrans
  3337.  
  3338. downrightmoretrans:
  3339.  move.w #320,d6
  3340.  move.w d2,d0
  3341.  move.w d2,d7
  3342.  
  3343. .linelop:
  3344.  move.b (a0),d4
  3345.  move.b (a4,d4.w*2),(a0)+
  3346.  sub.w d3,d0
  3347.  bgt.s .noextra
  3348.  add.w d2,d0
  3349.  add.w d6,a0
  3350. .noextra:
  3351.  dbra d7,.linelop
  3352.  
  3353.  rts
  3354.  
  3355. downmorerighttrans:
  3356.  move.w #320,d6
  3357.  move.w d3,d0
  3358.  move.w d3,d7
  3359.  
  3360. .linelop:
  3361.  move.b (a0),d4
  3362.  move.b (a4,d4.w*2),(a0)
  3363.  add.w d6,a0
  3364.  sub.w d2,d0
  3365.  bgt.s .noextra
  3366.  add.w d3,d0
  3367.  addq #1,a0
  3368. .noextra:
  3369.  dbra d7,.linelop
  3370.  
  3371.  rts
  3372.  
  3373. NOLINE:
  3374.  rts
  3375.  
  3376. DRAWAMAPLINE:
  3377.  
  3378.  
  3379.  move.l FASTBUFFER,a0    ; screen to render to.
  3380.  cmp.w d1,d3
  3381.  bgt.s .okdown
  3382.  bne.s .aline
  3383.  cmp.w d0,d2
  3384.  beq.s NOLINE 
  3385. .aline
  3386.  exg d0,d2
  3387.  exg d1,d3
  3388. .okdown
  3389.  
  3390.  move.w d1,d5
  3391.  muls #320,d5
  3392.  add.l d5,a0
  3393.  lea (a0,d0.w),a0
  3394.  
  3395.  sub.w d1,d3
  3396.  
  3397.  sub.w d0,d2
  3398.  bge.s downright
  3399.  
  3400. downleft:
  3401.  neg.w d2
  3402.  cmp.w d2,d3
  3403.  bgt.s downmoreleft
  3404.  
  3405. downleftmore:
  3406.  move.w #320,d6
  3407.  move.w d2,d0
  3408.  move.w d2,d7
  3409.  addq #1,a0
  3410.  
  3411. .linelop:
  3412.  move.b d4,-(a0)
  3413.  sub.w d3,d0
  3414.  bgt.s .noextra
  3415.  add.w d2,d0
  3416.  add.w d6,a0
  3417. .noextra:
  3418.  dbra d7,.linelop
  3419.  rts
  3420.  
  3421. downmoreleft:
  3422.  move.w #320,d6
  3423.  move.w d3,d0
  3424.  move.w d3,d7
  3425.  
  3426. .linelop:
  3427.  move.b d4,(a0)
  3428.  add.w d6,a0
  3429.  sub.w d2,d0
  3430.  bgt.s .noextra
  3431.  add.w d3,d0
  3432.  subq #1,a0
  3433. .noextra:
  3434.  dbra d7,.linelop
  3435.  
  3436.  rts
  3437.  
  3438. downright:
  3439.  
  3440.  cmp.w d2,d3
  3441.  bgt.s downmoreright
  3442.  
  3443. downrightmore:
  3444.  move.w #320,d6
  3445.  move.w d2,d0
  3446.  move.w d2,d7
  3447.  
  3448. .linelop:
  3449.  move.b d4,(a0)+
  3450.  sub.w d3,d0
  3451.  bgt.s .noextra
  3452.  add.w d2,d0
  3453.  add.w d6,a0
  3454. .noextra:
  3455.  dbra d7,.linelop
  3456.  
  3457.  rts
  3458.  
  3459. downmoreright:
  3460.  move.w #320,d6
  3461.  move.w d3,d0
  3462.  move.w d3,d7
  3463.  
  3464. .linelop:
  3465.  move.b d4,(a0)
  3466.  add.w d6,a0
  3467.  sub.w d2,d0
  3468.  bgt.s .noextra
  3469.  add.w d3,d0
  3470.  addq #1,a0
  3471. .noextra:
  3472.  dbra d7,.linelop
  3473.  
  3474.  rts
  3475.  
  3476. SAVETHESCREEN:
  3477.  
  3478.  move.l old,$dff080
  3479.  move.w #$8020,$dff000+intena
  3480.  
  3481.  move.l _IntuitionBase,a6
  3482.  jsr _LVORethinkDisplay(a6)
  3483.  
  3484.  move.l doslib,a6
  3485.  move.l #SAVENAME,d1
  3486.  move.l #1006,d2
  3487.  jsr -30(a6)
  3488.  move.l d0,handle
  3489.  
  3490.  move.l doslib,a6
  3491.  move.l #mt_init,d2
  3492.  move.l handle,d1
  3493.  move.l #10240*8,d3
  3494.  jsr _LVOWrite(a6)
  3495.  
  3496.  move.l doslib,a6
  3497.  move.l handle,d1
  3498.  jsr -36(a6)
  3499.  
  3500.  move.l doslib,a6
  3501.  move.l #200,d1
  3502.  jsr -198(a6) 
  3503.  
  3504.  move.w #$0020,$dff000+intena
  3505.  move.l #bigfield,$dff080
  3506.  
  3507.  add.b #1,SAVELETTER
  3508.  
  3509.  rts
  3510.  
  3511. SAVENAME: dc.b 'work:rawscrn'
  3512. SAVELETTER: dc.b 'd',0
  3513.  
  3514.  even
  3515.  
  3516.  include "ab3:source_4000/CHUNKY.s"
  3517.  
  3518.  
  3519. MASTERQUITTING: dc.b 0
  3520. SLAVEQUITTING: dc.b 0
  3521. MASTERPAUSE: dc.b 0
  3522. SLAVEPAUSE: dc.b 0
  3523.  
  3524. PAUSEOPTS:
  3525.  include "ab3:source_4000/pauseopts"
  3526.  
  3527. ENDZONE: dc.w 0
  3528.  
  3529. ENDZONES:
  3530. ; LEVEL 1
  3531.  dc.w -1
  3532. ; dc.w 55
  3533. ; LEVEL 2
  3534.  dc.w 149
  3535. ; LEVEL 3
  3536.  dc.w 155
  3537. ; LEVEL 4
  3538.  dc.w 107
  3539. ; LEVEL 5
  3540.  dc.w 67
  3541. ; LEVEL 6
  3542.  dc.w 132
  3543. ; LEVEL 7
  3544.  dc.w 203
  3545. ; LEVEL 8
  3546.  dc.w 166
  3547. ; LEVEL 9
  3548.  dc.w 118
  3549. ; LEVEL 10
  3550.  dc.w 102
  3551. ; LEVEL 11
  3552.  dc.w 103
  3553. ; LEVEL 12
  3554.  dc.w 2
  3555. ; LEVEL 13
  3556.  dc.w 98
  3557. ; LEVEL 14
  3558.  dc.w 0
  3559. ; LEVEL 15
  3560.  dc.w 148
  3561. ; LEVEL 16
  3562.  dc.w 103
  3563.  
  3564. ***************************************************************************
  3565. ***************************************************************************
  3566. ****************** End of Main Loop here ********************************** 
  3567. ***************************************************************************
  3568. ***************************************************************************
  3569.  
  3570. putinsmallscr:
  3571.  
  3572.  rts
  3573.  
  3574.  move.l #$1fe0000,statskip
  3575.  move.l #$1fe0000,statskip+4
  3576.  
  3577.  move.l #healthpal,a5
  3578. ; move.l COPSCRN1,a0
  3579. ; move.l COPSCRN2,a2
  3580.  move.w #scrheight-1,d0
  3581.  move.l #0,d6
  3582.  move.w #0,d3
  3583.  move.w #$2bdf,startwait
  3584.  move.w #$2d01,endwait
  3585. .fillcop
  3586.  move.w #$180,d1
  3587.  
  3588.  move.l a0,a1
  3589.  move.l a2,a3
  3590.  move.w #$10c,(a1)+
  3591.  move.w #$10c,(a3)+
  3592.  move.w d3,(a1)+
  3593.  move.w d3,(a3)+
  3594.  eor.w #$8000,d3
  3595.  
  3596.  move.w #$106,(a1)+
  3597.  move.w #$106,(a3)+
  3598.  move.w #$2c42,d5
  3599.  or.w d3,d5
  3600.  and.w #$fffe,d5
  3601.  move.w d5,(a1)+
  3602.  move.w d5,(a3)+
  3603.  bsr do32
  3604.  
  3605.  move.w #$106,(a1)+
  3606.  move.w #$106,(a3)+
  3607.  move.w #$4c42,d5
  3608.  or.w d3,d5
  3609.  and.w #$fffe,d5
  3610.  move.w d5,(a1)+
  3611.  move.w d5,(a3)+
  3612.  bsr do32
  3613.  
  3614.  move.w #$106,(a1)+
  3615.  move.w #$106,(a3)+
  3616.  move.w #$6c42,d5
  3617.  or.w d3,d5
  3618.  and.w #$fffe,d5
  3619.  move.w d5,(a1)+
  3620.  move.w d5,(a3)+
  3621.  bsr do32
  3622.  
  3623.  
  3624.  move.l #$1060c42,(a1)+
  3625.  move.l #$1060c42,(a3)+
  3626.  move.w #$19e,(a1)+
  3627.  move.w (a5),(a1)+
  3628.  move.w #$19e,(a3)+
  3629.  move.w (a5)+,(a3)+
  3630.  
  3631. **********************************
  3632.  
  3633.  adda.w #104*4,a0
  3634.  adda.w #104*4,a2
  3635.  dbra d0,.fillcop
  3636.  
  3637.  move.w #$48,fetchstart
  3638.  move.w #$88,fetchstop
  3639.  move.w #$2cb1,winstart
  3640.  move.w #$2c91,winstop
  3641.  move.w #-24,modulo
  3642.  move.w #-24,modulo+4
  3643.  
  3644.  move.l #nullspr,d0
  3645.  move.w d0,s4l
  3646.  move.w d0,s5l
  3647.  move.w d0,s6l
  3648.  move.w d0,s7l
  3649.  swap d0
  3650.  move.w d0,s4h
  3651.  move.w d0,s5h
  3652.  move.w d0,s6h
  3653.  move.w d0,s7h 
  3654.  
  3655. ; move.l #borders,d0
  3656. ; move.w d0,s0l
  3657. ; swap d0
  3658. ; move.w d0,s0h
  3659. ; move.l #borders+2592,d0
  3660. ; move.w d0,s1l
  3661. ; swap d0
  3662. ; move.w d0,s1h
  3663. ; move.l #borders+2592*2,d0
  3664. ; move.w d0,s2l
  3665. ; swap d0
  3666. ; move.w d0,s2h
  3667. ; move.l #borders+2592*3,d0
  3668. ; move.w d0,s3l
  3669. ; swap d0
  3670. ; move.w d0,s3h
  3671.  
  3672.  
  3673.  move.l scrn,a0
  3674.  add.l #40,a0
  3675.  move.l scrn,a1
  3676.  add.l #160,a1
  3677.  move.l scrn,a2
  3678.  add.l #280,a2
  3679.  move.l #smallscrntab,a3
  3680.  move.w #191,d7    ; counter
  3681.  move.w #0,d1    ; xpos
  3682. .plotscrnloop:
  3683.  move.b (a3)+,d0
  3684.  move.w d1,d2
  3685.  asr.w #3,d2
  3686.  move.b d1,d3
  3687.  not.b d3
  3688.  bclr.b d3,-40(a0,d2.w)
  3689.  bclr.b d3,(a0,d2.w)
  3690.  bclr.b d3,40(a0,d2.w)
  3691.  bclr.b d3,-40(a1,d2.w)
  3692.  bclr.b d3,(a1,d2.w)
  3693.  bclr.b d3,40(a1,d2.w)
  3694.  bclr.b d3,-40(a2,d2.w)
  3695.  btst #0,d0
  3696.  beq.s .nobp1
  3697.  bset.b d3,-40(a0,d2.w)
  3698. .nobp1:
  3699.  btst #1,d0
  3700.  beq.s .nobp2
  3701.  bset.b d3,(a0,d2.w)
  3702. .nobp2:
  3703.  btst #2,d0
  3704.  beq.s .nobp3
  3705.  bset.b d3,40(a0,d2.w)
  3706. .nobp3:
  3707.  btst #3,d0
  3708.  beq.s .nobp4
  3709.  bset.b d3,-40(a1,d2.w)
  3710. .nobp4:
  3711.  btst #4,d0
  3712.  beq.s .nobp5
  3713.  bset.b d3,(a1,d2.w)
  3714. .nobp5:
  3715.  btst #5,d0
  3716.  beq.s .nobp6
  3717.  bset.b d3,40(a1,d2.w)
  3718. .nobp6:
  3719.  btst #6,d0
  3720.  beq.s .nobp7
  3721.  bset.b d3,-40(a2,d2.w)
  3722. .nobp7:
  3723.  
  3724.  addq #1,d1
  3725.  
  3726.  dbra d7,.plotscrnloop
  3727.  
  3728.  
  3729.  rts
  3730.  
  3731. putinlargescr:
  3732.  
  3733.  move.l #$1000000,statskip
  3734.  move.l #$fffffffe,statskip+4
  3735.  
  3736.  move.l #healthpal,a5
  3737. ; move.l COPSCRN1,a0
  3738. ; move.l COPSCRN2,a2
  3739.  move.w #scrheight-1,d0
  3740.  move.l #0,d6
  3741.  move.w #0,d3
  3742.  move.w #$29df,startwait
  3743.  move.w #$2b01,endwait
  3744. .fillcop
  3745.  move.w #$180,d1
  3746.  
  3747.  move.l a0,a1
  3748.  move.l a2,a3
  3749.  move.w #$10c,(a1)+
  3750.  move.w #$10c,(a3)+
  3751.  move.w d3,(a1)+
  3752.  move.w d3,(a3)+
  3753.  eor.w #$8000,d3
  3754.  
  3755.  move.w #$106,(a1)+
  3756.  move.w #$106,(a3)+
  3757.  move.w #$2c42,d5
  3758.  or.w d3,d5
  3759.  and.w #$fffe,d5
  3760.  move.w d5,(a1)+
  3761.  move.w d5,(a3)+
  3762.  bsr do32
  3763.  
  3764.  move.w #$106,(a1)+
  3765.  move.w #$106,(a3)+
  3766.  move.w #$4c42,d5
  3767.  or.w d3,d5
  3768.  and.w #$fffe,d5
  3769.  move.w d5,(a1)+
  3770.  move.w d5,(a3)+
  3771.  bsr do32
  3772.  
  3773.  move.w #$106,(a1)+
  3774.  move.w #$106,(a3)+
  3775.  move.w #$6c42,d5
  3776.  or.w d3,d5
  3777.  and.w #$fffe,d5
  3778.  move.w d5,(a1)+
  3779.  move.w d5,(a3)+
  3780.  bsr do32
  3781.  
  3782.  move.w startwait,(a1)+
  3783.  move.w #$fffe,(a1)+
  3784.  move.w endwait,(a1)+
  3785.  move.w #$ff00,(a1)+
  3786.  move.w startwait,(a3)+
  3787.  move.w #$fffe,(a3)+
  3788.  move.w endwait,(a3)+
  3789.  move.w #$ff00,(a3)+
  3790.  
  3791. ; move.l $1fe0000,(a1)+
  3792. ; move.l $1fe0000,(a3)+
  3793. ; move.l $1fe0000,(a1)+
  3794. ; move.l $1fe0000,(a3)+
  3795.  
  3796.  
  3797.  add.w #$300,startwait
  3798.  add.w #$300,endwait
  3799.  
  3800. ; move.l #$1060c42,(a1)+
  3801. ; move.l #$1060c42,(a3)+
  3802. ; move.w #$19e,(a1)+
  3803. ; move.w (a5),(a1)+
  3804. ; move.w #$19e,(a3)+
  3805. ; move.w (a5)+,(a3)+
  3806.  
  3807. **********************************
  3808.  
  3809.  adda.w #104*4,a0
  3810.  adda.w #104*4,a2
  3811.  dbra d0,.fillcop
  3812.  
  3813.  move.w #$38,fetchstart
  3814.  move.w #$b8,fetchstop
  3815.  move.w #$2c81,winstart
  3816.  move.w #$2cc1,winstop
  3817.  move.w #-40,modulo
  3818.  move.w #-40,modulo+4
  3819.  
  3820.  move.l #nullspr,d0
  3821.  move.w d0,s0l
  3822.  move.w d0,s1l
  3823.  move.w d0,s2l
  3824.  move.w d0,s3l
  3825.  move.w d0,s4l
  3826.  move.w d0,s5l
  3827.  move.w d0,s6l
  3828.  move.w d0,s7l
  3829.  swap d0
  3830.  move.w d0,s0h
  3831.  move.w d0,s1h
  3832.  move.w d0,s2h
  3833.  move.w d0,s3h
  3834.  move.w d0,s4h
  3835.  move.w d0,s5h
  3836.  move.w d0,s6h
  3837.  move.w d0,s7h 
  3838.  
  3839.  move.l scrn,a0
  3840.  move.l a0,a1
  3841.  move.l a0,a2
  3842.  add.l #40,a0
  3843.  add.l #160,a1
  3844.  add.l #280,a2
  3845.  move.l #scrntab,a3
  3846.  move.w #319,d7    ; counter
  3847.  move.w #0,d1    ; xpos
  3848. .plotscrnloop:
  3849.  move.b (a3)+,d0
  3850.  move.w d1,d2
  3851.  asr.w #3,d2
  3852.  move.b d1,d3
  3853.  not.b d3
  3854.  bclr.b d3,-40(a0,d2.w)
  3855.  bclr.b d3,(a0,d2.w)
  3856.  bclr.b d3,40(a0,d2.w)
  3857.  bclr.b d3,-40(a1,d2.w)
  3858.  bclr.b d3,(a1,d2.w)
  3859.  bclr.b d3,40(a1,d2.w)
  3860.  bclr.b d3,-40(a2,d2.w)
  3861.  btst #0,d0
  3862.  beq.s .nobp1
  3863.  bset.b d3,-40(a0,d2.w)
  3864. .nobp1:
  3865.  btst #1,d0
  3866.  beq.s .nobp2
  3867.  bset.b d3,(a0,d2.w)
  3868. .nobp2:
  3869.  btst #2,d0
  3870.  beq.s .nobp3
  3871.  bset.b d3,40(a0,d2.w)
  3872. .nobp3:
  3873.  btst #3,d0
  3874.  beq.s .nobp4
  3875.  bset.b d3,-40(a1,d2.w)
  3876. .nobp4:
  3877.  btst #4,d0
  3878.  beq.s .nobp5
  3879.  bset.b d3,(a1,d2.w)
  3880. .nobp5:
  3881.  btst #5,d0
  3882.  beq.s .nobp6
  3883.  bset.b d3,40(a1,d2.w)
  3884. .nobp6:
  3885.  btst #6,d0
  3886.  beq.s .nobp7
  3887.  bset.b d3,-40(a2,d2.w)
  3888. .nobp7:
  3889.  
  3890.  addq #1,d1
  3891.  
  3892.  dbra d7,.plotscrnloop
  3893.  
  3894.  rts
  3895.  
  3896. CLEARKEYBOARD:
  3897.  move.l #KeyMap,a5
  3898.  moveq #0,d0
  3899.  move.w #15,d1
  3900. clrloo:
  3901.  move.l d0,(a5)+
  3902.  move.l d0,(a5)+
  3903.  move.l d0,(a5)+
  3904.  move.l d0,(a5)+
  3905.  dbra d1,clrloo
  3906.  rts
  3907.  
  3908. READCONTROLS: dc.w 0
  3909.  
  3910. tstststst: dc.w 0
  3911.  
  3912. BollocksRoom:
  3913.  dc.w -1
  3914.  ds.l 50
  3915.  
  3916. GUNYOFFS:
  3917.  dc.w 20
  3918.  dc.w 20
  3919.  dc.w 0
  3920.  dc.w 20
  3921.  dc.w 20
  3922.  dc.w 0
  3923.  dc.w 0
  3924.  dc.w 20
  3925.  
  3926. PLR1_BOBBLEY: dc.l 0
  3927. PLR2_BOBBLEY: dc.l 0
  3928.  
  3929. USEPLR1:
  3930.  
  3931. ***********************************
  3932.  
  3933.  move.l PLR1_Obj,a0 
  3934.  move.b #4,16(a0)
  3935.  move.l ObjectPoints,a1
  3936.  move.l #ObjRotated,a2
  3937.  move.w (a0),d0
  3938.  move.l PLR1_xoff,(a1,d0.w*8)
  3939.  move.l PLR1_zoff,4(a1,d0.w*8)
  3940.  move.l PLR1_Roompt,a1
  3941.  
  3942.  moveq #0,d2
  3943.  move.b damagetaken(a0),d2
  3944.  beq .notbeenshot
  3945.  
  3946.  moveq #0,d4
  3947.  move.w ImpactX(a0),d3
  3948.  beq.s .notwist
  3949.  move.w d2,d4
  3950. .notwist:
  3951.  add.w d3,PLR1s_xspdval
  3952.  move.w ImpactZ(a0),d3
  3953.  beq.s .notwist2
  3954.  move.w d2,d4
  3955. .notwist2:
  3956.  add.w d3,PLR1s_zspdval
  3957.  move.w ImpactY(a0),d3
  3958.  ext.l d3
  3959.  asl.l #8,d3
  3960.  add.l d3,PLR1s_yvel
  3961.  
  3962.  move.w #0,ImpactX(a0)
  3963.  move.w #0,ImpactY(a0)
  3964.  move.w #0,ImpactZ(a0)
  3965.  
  3966.  jsr GetRand
  3967.  muls d4,d0
  3968.  asr.l #8,d0
  3969.  asr.l #4,d0
  3970.  add.w d0,PLR1s_angspd
  3971.  
  3972.  move.l #7*2116,hitcol
  3973.  sub.w d2,PLAYERONEHEALTH
  3974.  movem.l d0-d7/a0-a6,-(a7)
  3975.  move.b #$fb,IDNUM
  3976.  move.w #19,Samplenum
  3977.  clr.b notifplaying
  3978.  move.w #0,Noisex
  3979.  move.w #0,Noisez
  3980.  move.w #100,Noisevol
  3981.  jsr MakeSomeNoise
  3982.  
  3983.  movem.l (a7)+,d0-d7/a0-a6
  3984.  
  3985. .notbeenshot
  3986.  move.b #0,damagetaken(a0)
  3987.  move.b #10,numlives(a0)
  3988.  
  3989.  move.w p1_angpos,Facing(a0)
  3990.  move.b PLR1_StoodInTop,ObjInTop(a0)
  3991.  
  3992.  move.w (a1),12(a0)
  3993.  move.w (a1),d2
  3994.  move.l #ZoneBrightTable,a1
  3995.  move.l (a1,d2.w*4),d2
  3996.  tst.b PLR1_StoodInTop
  3997.  bne.s .okinbott
  3998.  swap d2
  3999. .okinbott:
  4000.  
  4001.  move.w d2,2(a0)
  4002.  
  4003.  
  4004.  move.l p1_yoff,d0
  4005.  move.l p1_height,d1
  4006.  asr.l #1,d1
  4007.  add.l d1,d0
  4008.  asr.l #7,d0
  4009.  move.w d0,4(a0)
  4010.  
  4011. ***********************************
  4012.  
  4013.  move.l PLR2_Obj,a0 
  4014.  move.b #5,16(a0)
  4015.  
  4016.  move.w p2_angpos,d0
  4017.  and.w #8190,d0
  4018.  move.w d0,Facing(a0)
  4019. ; jsr ViewpointToDraw
  4020. ; asl.w #2,d0
  4021. ; moveq #0,d1
  4022. ; move.b p2_bobble,d1
  4023. ; not.b d1
  4024. ; lsr.b #3,d1
  4025. ; and.b #$3,d1
  4026. ; add.w d1,d0
  4027. ; move.w d0,10(a0)
  4028. ; move.w #10,8(a0)
  4029.  
  4030.  move.l ObjectPoints,a1
  4031.  move.l #ObjRotated,a2
  4032.  move.w (a0),d0
  4033.  move.l PLR2_xoff,(a1,d0.w*8)
  4034.  move.l PLR2_zoff,4(a1,d0.w*8)
  4035.  move.l PLR2_Roompt,a1
  4036.  
  4037.  moveq #0,d2
  4038.  move.b damagetaken(a0),d2
  4039.  beq .notbeenshot2
  4040.  move.w ImpactX(a0),d3
  4041.  add.w d3,PLR2s_xspdval
  4042.  move.w ImpactZ(a0),d3
  4043.  add.w d3,PLR2s_zspdval
  4044.  move.w ImpactY(a0),d3
  4045.  ext.l d3
  4046.  asl.l #8,d3
  4047.  add.l d3,PLR2s_yvel
  4048.  
  4049.  move.w #0,ImpactX(a0)
  4050.  move.w #0,ImpactY(a0)
  4051.  move.w #0,ImpactZ(a0)
  4052.  
  4053.  sub.w d2,PLAYERTWOHEALTH
  4054. .notbeenshot2
  4055.  move.b #0,damagetaken(a0)
  4056.  move.b #10,numlives(a0)
  4057.  
  4058.  move.b PLR2_StoodInTop,ObjInTop(a0)
  4059.  
  4060.  move.w (a1),12(a0)
  4061.  move.w (a1),d2
  4062.  move.l #ZoneBrightTable,a1
  4063.  move.l (a1,d2.w*4),d2
  4064.  tst.b PLR2_StoodInTop
  4065.  bne.s .okinbott2
  4066.  swap d2
  4067. .okinbott2:
  4068.  
  4069.  move.w d2,2(a0)
  4070.  
  4071.  move.l p2_yoff,d0
  4072.  move.l p2_height,d1
  4073.  asr.l #1,d1
  4074.  add.l d1,d0
  4075.  asr.l #7,d0
  4076.  move.w d0,4(a0)
  4077.  
  4078.  jsr ViewpointToDraw
  4079.  add.l d0,d0
  4080.  
  4081.  move.l LINKFILE,a6
  4082.  add.l #PLR2ALIEN,a6
  4083.  move.w (a6),d7
  4084.  move.w d7,d1
  4085.  
  4086.  move.l LINKFILE,a6
  4087.  add.l #AlienStats,a6
  4088.  muls #AlienStatLen,d1
  4089.  add.l d1,a6
  4090.  move.b A_GFXType+1(a6),VECOBJ
  4091.  cmp.w #1,A_GFXType(a6)
  4092.  bne.s .NOSIDES2
  4093.  
  4094.  moveq #0,d0
  4095.  
  4096. .NOSIDES2:
  4097.  
  4098.  move.l LINKFILE,a6
  4099.  
  4100.  add.l #AlienAnimData,a6
  4101.  
  4102.  move.w d7,d1
  4103.  muls #A_AnimLen,d1
  4104.  add.l d1,a6
  4105.  
  4106. ; move.l ANIMPOINTER,a6
  4107.  
  4108.  muls #A_OptLen,d0
  4109.  add.w d0,a6
  4110.  
  4111.  move.w SecTimer(a0),d1
  4112.  move.w d1,d2
  4113.  muls #A_FrameLen,d1
  4114.  
  4115.  addq #1,d2
  4116.  
  4117.  move.w d2,d3
  4118.  muls #A_FrameLen,d3
  4119.  tst.b (a6,d3.w)
  4120.  bge.s .noendanim
  4121.  move.w #0,d2
  4122. .noendanim
  4123.  move.w d2,SecTimer(a0)
  4124.  
  4125.  move.w d2,d1
  4126.  
  4127.  muls #A_FrameLen,d1
  4128.  
  4129.  move.l #0,8(a0)
  4130.  move.b (a6,d1.w),9(a0)
  4131.  move.b 1(a6,d1.w),d0
  4132.  ext.w d0
  4133.  bgt.s .noflip
  4134.  move.b #128,10(a0)
  4135.  neg.w d0
  4136. .noflip:
  4137.  sub.w #1,d0
  4138.  move.b d0,11(a0)
  4139.  
  4140.  move.w #-1,6(a0)
  4141.  cmp.b #1,VECOBJ
  4142.  beq.s .nosize
  4143.  bgt.s .setlight
  4144.  move.w 2(a6,d1.w),6(a0)
  4145.  bra.s .ddone
  4146.  
  4147. .nosize
  4148.  
  4149. ; move.l #$00090001,8(a0)
  4150.  
  4151.  bra.s .ddone
  4152.  
  4153. .setlight:
  4154.  move.w 2(a6,d1.w),6(a0)
  4155.  
  4156.  move.b VECOBJ,d1
  4157.  or.b d1,10(a0)
  4158.  
  4159. .ddone:
  4160.  
  4161.  
  4162. **********************************
  4163.  
  4164.  move.l PLR1_Obj,a0
  4165.  
  4166.  ifeq CHEESEY
  4167.  
  4168.  tst.w PLAYERONEHEALTH
  4169.  bgt.s .notdead
  4170.  
  4171.  move.w #-1,12+128(a0)
  4172.  rts
  4173.  
  4174. .notdead: 
  4175.  
  4176.  move.l PLR1_Roompt,a1
  4177.  
  4178.  move.w Facing(a0),d0
  4179.  add.w #4096,d0
  4180.  and.w #8190,d0
  4181.  move.w d0,Facing+128(a0)
  4182.  
  4183.  move.w (a1),12+128(a0)
  4184.  move.w (a1),GraphicRoom+128(a0)
  4185.  
  4186.  moveq #0,d0
  4187.  move.b p1_gunselected,d0
  4188.  
  4189.  move.l LINKFILE,a1
  4190.  add.l #GunObjects,a1
  4191.  move.w (a1,d0.w*2),d0
  4192.  
  4193.  move.b d0,TypeOfThing+128(a0)
  4194.  move.b #1,128+16(a0)
  4195.  
  4196.  move.w (a0),d0
  4197.  move.w 128(a0),d1
  4198.  move.l ObjectPoints,a1
  4199.  move.l (a1,d0.w*8),(a1,d1.w*8)
  4200.  move.l 4(a1,d0.w*8),4(a1,d1.w*8)
  4201.  
  4202.  st WhichAnim+128(a0)
  4203.  
  4204.  move.l p1_yoff,d0
  4205.  move.l p1_height,d1
  4206.  asr.l #2,d1
  4207.  add.l #10*128,d1
  4208.  add.l d1,d0
  4209.  asr.l #7,d0
  4210.  move.w d0,4+128(a0)
  4211.  move.l PLR1_BOBBLEY,d1
  4212.  asr.l #8,d1
  4213.  move.l d1,d0
  4214.  asr.l #1,d0
  4215.  add.l d0,d1
  4216.  add.w d1,4+128(a0)
  4217.  
  4218.  move.b ObjInTop(a0),ObjInTop+128(a0)
  4219.  
  4220.  endc
  4221.  
  4222.  ifne CHEESEY
  4223.  move.w #-1,12+128(a0)
  4224.  endc
  4225.  
  4226.  rts
  4227.  
  4228. ***************************************************
  4229. **************************************************
  4230.  
  4231. USEPLR2:
  4232.  
  4233. ***********************************
  4234.  
  4235.  move.l PLR2_Obj,a0 
  4236.  move.b #5,16(a0)
  4237.  move.l ObjectPoints,a1
  4238.  move.l #ObjRotated,a2
  4239.  move.w (a0),d0
  4240.  move.l PLR2_xoff,(a1,d0.w*8)
  4241.  move.l PLR2_zoff,4(a1,d0.w*8)
  4242.  move.l PLR2_Roompt,a1
  4243.  
  4244.  moveq #0,d2
  4245.  move.b damagetaken(a0),d2
  4246.  beq .notbeenshot
  4247.  
  4248.  moveq #0,d4
  4249.  move.w ImpactX(a0),d3
  4250.  beq.s .notwist
  4251.  move.w d2,d4
  4252. .notwist:
  4253.  add.w d3,PLR2s_xspdval
  4254.  move.w ImpactZ(a0),d3
  4255.  beq.s .notwist2
  4256.  move.w d2,d4
  4257. .notwist2:
  4258.  add.w d3,PLR2s_zspdval
  4259.  
  4260.  jsr GetRand
  4261.  muls d4,d0
  4262.  asr.l #8,d0
  4263.  asr.l #4,d0
  4264.  add.w d0,PLR2s_angspd
  4265.  
  4266.  move.l #7*2116,hitcol
  4267.  sub.w d2,PLAYERTWOHEALTH
  4268.  movem.l d0-d7/a0-a6,-(a7)
  4269.  move.w #19,Samplenum
  4270.  clr.b notifplaying
  4271.  move.b #$fb,IDNUM
  4272.  move.w #0,Noisex
  4273.  move.w #0,Noisez
  4274.  move.w #100,Noisevol
  4275.  jsr MakeSomeNoise
  4276.  
  4277.  movem.l (a7)+,d0-d7/a0-a6
  4278.  
  4279. .notbeenshot
  4280.  move.b #0,damagetaken(a0)
  4281.  move.b #10,numlives(a0)
  4282.  
  4283.  move.w p2_angpos,Facing(a0)
  4284.  move.b PLR2_StoodInTop,ObjInTop(a0)
  4285.  
  4286.  move.w (a1),12(a0)
  4287.  move.w (a1),d2
  4288.  move.l #ZoneBrightTable,a1
  4289.  move.l (a1,d2.w*4),d2
  4290.  tst.b PLR2_StoodInTop
  4291.  bne.s .okinbott
  4292.  swap d2
  4293. .okinbott:
  4294.  
  4295.  move.w d2,2(a0)
  4296.  
  4297.  move.l PLR2_yoff,d0
  4298.  move.l p2_height,d1
  4299.  asr.l #1,d1
  4300.  add.l d1,d0
  4301.  asr.l #7,d0
  4302.  move.w d0,4(a0)
  4303.  
  4304. ***********************************
  4305.  
  4306.  move.l PLR1_Obj,a0 
  4307.  move.b #4,16(a0)
  4308.  
  4309.  move.w PLR1_angpos,d0
  4310.  and.w #8190,d0
  4311.  move.w d0,Facing(a0)
  4312. ; jsr ViewpointToDraw
  4313. ; asl.w #2,d0
  4314. ; moveq #0,d1
  4315. ; move.b p2_bobble,d1
  4316. ; not.b d1
  4317. ; lsr.b #3,d1
  4318. ; and.b #$3,d1
  4319. ; add.w d1,d0
  4320. ; move.w d0,10(a0)
  4321. ; move.w #10,8(a0)
  4322.  
  4323.  move.l ObjectPoints,a1
  4324.  move.l #ObjRotated,a2
  4325.  move.w (a0),d0
  4326.  move.l PLR1_xoff,(a1,d0.w*8)
  4327.  move.l PLR1_zoff,4(a1,d0.w*8)
  4328.  move.l PLR1_Roompt,a1
  4329.  
  4330.  moveq #0,d2
  4331.  move.b damagetaken(a0),d2
  4332.  beq .notbeenshot2
  4333.  
  4334.  move.w ImpactX(a0),d3
  4335.  add.w d3,PLR1s_xspdval
  4336.  move.w ImpactZ(a0),d3
  4337.  add.w d3,PLR1s_zspdval
  4338.  
  4339.  sub.w d2,PLAYERONEHEALTH
  4340. .notbeenshot2
  4341.  move.b #0,damagetaken(a0)
  4342.  move.b #10,numlives(a0)
  4343.  
  4344.  move.b PLR1_StoodInTop,ObjInTop(a0)
  4345.  
  4346.  move.w (a1),12(a0)
  4347.  move.w (a1),d2
  4348.  move.l #ZoneBrightTable,a1
  4349.  move.l (a1,d2.w*4),d2
  4350.  tst.b PLR1_StoodInTop
  4351.  bne.s .okinbott2
  4352.  swap d2
  4353. .okinbott2:
  4354.  
  4355.  move.w d2,2(a0)
  4356.  
  4357.  move.l p1_yoff,d0
  4358.  move.l p1_height,d1
  4359.  asr.l #1,d1
  4360.  add.l d1,d0
  4361.  asr.l #7,d0
  4362.  move.w d0,4(a0)
  4363.  
  4364.  jsr ViewpointToDraw
  4365.  add.l d0,d0
  4366.  
  4367.  move.l LINKFILE,a6
  4368.  add.l #PLR1ALIEN,a6
  4369.  move.w (a6),d7
  4370.  move.w d7,d1
  4371.  
  4372.  move.l LINKFILE,a6
  4373.  add.l #AlienStats,a6
  4374.  muls #AlienStatLen,d1
  4375.  add.l d1,a6
  4376.  move.b A_GFXType+1(a6),VECOBJ
  4377.  cmp.w #1,A_GFXType(a6)
  4378.  bne.s .NOSIDES2
  4379.  
  4380.  moveq #0,d0
  4381.  
  4382. .NOSIDES2:
  4383.  
  4384.  move.l LINKFILE,a6
  4385.  
  4386.  add.l #AlienAnimData,a6
  4387.  
  4388.  move.w d7,d1
  4389.  muls #A_AnimLen,d1
  4390.  add.l d1,a6
  4391.  
  4392. ; move.l ANIMPOINTER,a6
  4393.  
  4394.  muls #A_OptLen,d0
  4395.  add.w d0,a6
  4396.  
  4397.  move.w SecTimer(a0),d1
  4398.  move.w d1,d2
  4399.  muls #A_FrameLen,d1
  4400.  
  4401.  addq #1,d2
  4402.  
  4403.  move.w d2,d3
  4404.  muls #A_FrameLen,d3
  4405.  tst.b (a6,d3.w)
  4406.  bge.s .noendanim
  4407.  move.w #0,d2
  4408. .noendanim
  4409.  move.w d2,SecTimer(a0)
  4410.  
  4411.  move.w d2,d1
  4412.  
  4413.  muls #A_FrameLen,d1
  4414.  
  4415.  move.l #0,8(a0)
  4416.  move.b (a6,d1.w),9(a0)
  4417.  move.b 1(a6,d1.w),d0
  4418.  ext.w d0
  4419.  bgt.s .noflip
  4420.  move.b #128,10(a0)
  4421.  neg.w d0
  4422. .noflip:
  4423.  sub.w #1,d0
  4424.  move.b d0,11(a0)
  4425.  
  4426.  move.w #-1,6(a0)
  4427.  cmp.b #1,VECOBJ
  4428.  beq.s .nosize
  4429.  bgt.s .setlight
  4430.  move.w 2(a6,d1.w),6(a0)
  4431.  bra.s .ddone
  4432.  
  4433. .nosize
  4434.  
  4435. ; move.l #$00090001,8(a0)
  4436.  
  4437.  bra.s .ddone
  4438.  
  4439. .setlight:
  4440.  move.w 2(a6,d1.w),6(a0)
  4441.  
  4442.  move.b VECOBJ,d1
  4443.  or.b d1,10(a0)
  4444.  
  4445. .ddone:
  4446.  
  4447. **********************************
  4448.  
  4449.  move.l PLR2_Obj,a0
  4450.  
  4451.  ifeq CHEESEY
  4452.  
  4453.  tst.w PLAYERTWOHEALTH
  4454.  bgt.s .notdead
  4455.  
  4456.  move.w #-1,12+64(a0)
  4457.  rts
  4458.  
  4459. .notdead: 
  4460.  move.l PLR2_Roompt,a1
  4461.  
  4462.  move.w Facing(a0),d0
  4463.  add.w #4096,d0
  4464.  and.w #8190,d0
  4465.  move.w d0,Facing+64(a0)
  4466.  
  4467.  move.w (a1),12+64(a0)
  4468.  move.w (a1),GraphicRoom+64(a0)
  4469.  
  4470.  moveq #0,d0
  4471.  move.b p2_gunselected,d0
  4472.  
  4473.  move.l LINKFILE,a1
  4474.  add.l #GunObjects,a1
  4475.  move.w (a1,d0.w*2),d0
  4476.  
  4477.  move.b d0,TypeOfThing+64(a0)
  4478.  move.b #1,64+16(a0)
  4479.  
  4480.  move.w (a0),d0
  4481.  move.w 64(a0),d1
  4482.  move.l ObjectPoints,a1
  4483.  move.l (a1,d0.w*8),(a1,d1.w*8) 
  4484.  move.l 4(a1,d0.w*8),4(a1,d1.w*8) 
  4485.  
  4486.  st WhichAnim+64(a0)
  4487.  
  4488.  move.l p2_yoff,d0
  4489.  move.l p2_height,d1
  4490.  asr.l #2,d1
  4491.  add.l #10*128,d1
  4492.  add.l d1,d0
  4493.  asr.l #7,d0
  4494.  move.w d0,4+64(a0)
  4495.  move.l PLR2_BOBBLEY,d1
  4496.  asr.l #8,d1
  4497.  move.l d1,d0
  4498.  asr.l #1,d0
  4499.  add.l d0,d1
  4500.  add.w d1,4+64(a0)
  4501.  
  4502.  move.b ObjInTop(a0),ObjInTop+64(a0)
  4503.  
  4504.  endc
  4505.  
  4506.  ifne CHEESEY
  4507.  
  4508.  move.w #-1,12+64(a0)
  4509.  endc
  4510.  
  4511.  rts
  4512.  
  4513.  
  4514.  
  4515. GunSelected: dc.b 0
  4516.  even
  4517.  
  4518.  
  4519. GunData: dc.l 0
  4520.  
  4521.  
  4522. protA: dc.w 0
  4523.  
  4524. Path:
  4525. ; incbin "testpath"
  4526. endpath:
  4527. pathpt: dc.l Path
  4528.  
  4529.  
  4530. PLR1KEYS: dc.b 0
  4531. PLR1PATH: dc.b 0
  4532. PLR1MOUSE: dc.b -1
  4533. PLR1JOY: dc.b 0
  4534. PLR2KEYS: dc.b 0
  4535. PLR2PATH: dc.b 0
  4536. PLR2MOUSE: dc.b -1
  4537. PLR2JOY: dc.b 0
  4538.  
  4539.  even
  4540.  
  4541. PLR1_bobble: dc.w 0
  4542. PLR2_bobble: dc.w 0
  4543. xwobble: dc.l 0
  4544. xwobxoff: dc.w 0
  4545.  
  4546. xwobzoff: dc.w 0
  4547.  
  4548. PLR1_Control:
  4549.  
  4550. ; Take a snapshot of everything.
  4551.  
  4552.  move.l PLR1_xoff,d2
  4553.  move.l d2,PLR1_oldxoff
  4554.  move.l d2,oldx
  4555.  move.l PLR1_zoff,d3
  4556.  move.l d3,PLR1_oldzoff
  4557.  move.l d3,oldz
  4558.  move.l p1_xoff,d0
  4559.  move.l d0,PLR1_xoff
  4560.  move.l d0,newx
  4561.  move.l p1_zoff,d1
  4562.  move.l d1,newz
  4563.  move.l d1,PLR1_zoff
  4564.  
  4565.  move.l p1_height,PLR1_height
  4566.  
  4567.  sub.l d2,d0
  4568.  sub.l d3,d1
  4569.  move.l d0,xdiff
  4570.  move.l d1,zdiff
  4571.  move.w p1_angpos,d0
  4572.  move.w d0,PLR1_angpos
  4573.  
  4574.  move.l #SineTable,a1
  4575.  move.w (a1,d0.w),PLR1_sinval
  4576.  add.w #2048,d0
  4577.  and.w #8190,d0
  4578.  move.w (a1,d0.w),PLR1_cosval
  4579.  
  4580.  move.l p1_yoff,d0
  4581.  move.w p1_bobble,d1
  4582.  move.w (a1,d1.w),d1
  4583.  move.w d1,d3
  4584.  ble.s .notnegative
  4585.  neg.w d1
  4586. .notnegative:
  4587.  add.w #16384,d1
  4588.  asr.w #4,d1
  4589.  
  4590.  tst.b PLR1_Ducked
  4591.  bne.s .notdouble
  4592.  add.w d1,d1
  4593. .notdouble
  4594.  ext.l d1
  4595.  
  4596.  move.l d1,PLR1_BOBBLEY
  4597.  
  4598.  move.l PLR1_height,d4
  4599.  sub.l d1,d4
  4600.  add.l d1,d0
  4601.  
  4602.  cmp.b #'s',mors
  4603.  beq.s .otherwob
  4604.  asr.w #6,d3
  4605.  ext.l d3
  4606.  move.l d3,xwobble
  4607.  move.w PLR1_sinval,d1
  4608.  muls d3,d1
  4609.  move.w PLR1_cosval,d2
  4610.  muls d3,d2
  4611.  swap d1
  4612.  swap d2
  4613.  asr.w #7,d1
  4614.  move.w d1,xwobxoff
  4615.  asr.w #7,d2
  4616.  neg.w d2
  4617.  move.w d2,xwobzoff
  4618. .otherwob
  4619.  
  4620.  move.l d0,PLR1_yoff
  4621.  move.l d0,newy
  4622.  move.l d0,oldy
  4623.  
  4624.  move.l d4,thingheight
  4625.  move.l #40*256,StepUpVal
  4626.  tst.b PLR1_Ducked
  4627.  beq.s .okbigstep
  4628.  move.l #10*256,StepUpVal
  4629. .okbigstep:
  4630.  
  4631.  move.l #$1000000,StepDownVal
  4632.  
  4633.  move.l PLR1_Roompt,a0
  4634.  move.w ToTelZone(a0),d0
  4635.  blt .noteleport
  4636.  
  4637.  move.w ToTelX(a0),newx
  4638.  move.w ToTelZ(a0),newz
  4639.  move.w #-1,CollId
  4640.  move.l #%111111111111111111,CollideFlags
  4641.  bsr Collision
  4642.  tst.b hitwall
  4643.  beq.s .teleport
  4644.  
  4645.  move.w PLR1_xoff,newx
  4646.  move.w PLR1_zoff,newz
  4647.  bra .noteleport
  4648.  
  4649. .teleport:
  4650.  
  4651.  st PLR1_TELEPORTED
  4652.  
  4653.  move.l PLR1_Roompt,a0
  4654.  move.w ToTelZone(a0),d0
  4655.  move.w ToTelX(a0),PLR1_xoff
  4656.  move.w ToTelZ(a0),PLR1_zoff
  4657.  move.l PLR1_yoff,d1
  4658.  sub.l ToZoneFloor(a0),d1
  4659.  move.l ZoneAdds,a0
  4660.  move.l (a0,d0.w*4),a0
  4661.  add.l LEVELDATA,a0
  4662.  move.l a0,PLR1_Roompt
  4663.  add.l ToZoneFloor(a0),d1
  4664.  move.l d1,PLR1s_yoff
  4665.  move.l d1,PLR1_yoff
  4666.  move.l d1,PLR1s_tyoff
  4667.  move.l PLR1_xoff,PLR1s_xoff
  4668.  move.l PLR1_zoff,PLR1s_zoff
  4669.  
  4670.  SAVEREGS
  4671.  move.w #0,Noisex
  4672.  move.w #0,Noisez
  4673.  move.w #26,Samplenum
  4674.  move.w #100,Noisevol
  4675.  move.b #$fa,IDNUM
  4676.  jsr MakeSomeNoise
  4677.  GETREGS
  4678.  
  4679.  bra .cantmove
  4680.  
  4681. .noteleport:
  4682.  
  4683.  move.l PLR1_Roompt,objroom
  4684.  move.w #%100000000,wallflags
  4685.  move.b PLR1_StoodInTop,StoodInTop
  4686.  
  4687.  move.l #%1011111110111000011,CollideFlags
  4688.  move.w #-1,CollId
  4689.  
  4690.  bsr Collision
  4691.  tst.b hitwall
  4692.  beq.s .nothitanything
  4693.  move.w oldx,PLR1_xoff
  4694.  move.w oldz,PLR1_zoff
  4695.  move.l PLR1_xoff,PLR1s_xoff
  4696.  move.l PLR1_zoff,PLR1s_zoff
  4697.  bra .cantmove
  4698. .nothitanything:
  4699.  
  4700.  move.w #40,extlen
  4701.  move.b #0,awayfromwall
  4702.  
  4703.  clr.b exitfirst
  4704.  clr.b wallbounce
  4705.  bsr MoveObject
  4706.  move.b StoodInTop,PLR1_StoodInTop
  4707.  move.l objroom,PLR1_Roompt
  4708.  move.w newx,PLR1_xoff
  4709.  move.w newz,PLR1_zoff
  4710.  move.l PLR1_xoff,PLR1s_xoff
  4711.  move.l PLR1_zoff,PLR1s_zoff
  4712.  
  4713. .cantmove:
  4714.  
  4715.  move.l PLR1_Roompt,a0
  4716.  
  4717.  move.l ToZoneFloor(a0),d0
  4718.  tst.b PLR1_StoodInTop
  4719.  beq.s notintop
  4720.  move.l ToUpperFloor(a0),d0
  4721. notintop:
  4722.  
  4723.  adda.w #ToZonePts,a0
  4724.  sub.l PLR1_height,d0
  4725.  move.l d0,PLR1s_tyoff
  4726.  move.w p1_angpos,tmpangpos
  4727.  
  4728. ; move.l (a0),a0        ; jump to viewpoint list
  4729.  * A0 is pointing at a pointer to list of points to rotate
  4730.  move.w (a0)+,d1
  4731.  ext.l d1
  4732.  add.l PLR1_Roompt,d1
  4733.  move.l d1,PLR1_PointsToRotatePtr
  4734.  tst.w (a0)+
  4735.  sne.s DRAWNGRAPHTOP
  4736.  beq.s nobackgraphics
  4737.  cmp.b #'s',mors
  4738.  beq.s nobackgraphics
  4739.  move.l a0,-(a7)
  4740.  jsr putinbackdrop 
  4741.  move.l (a7)+,a0
  4742. nobackgraphics:
  4743.  adda.w #10,a0
  4744.  move.l a0,PLR1_ListOfGraphRooms
  4745.  
  4746. *************************************************
  4747.  rts
  4748.  
  4749. DRAWNGRAPHTOP
  4750.  dc.w 0 
  4751. tstzone: dc.l 0
  4752. CollId: dc.w 0
  4753.  
  4754. PLR2_Control:
  4755.  
  4756. ; Take a snapshot of everything.
  4757.  
  4758.  move.l PLR2_xoff,d2
  4759.  move.l d2,PLR2_oldxoff
  4760.  move.l d2,oldx
  4761.  move.l PLR2_zoff,d3
  4762.  move.l d3,PLR2_oldzoff
  4763.  move.l d3,oldz
  4764.  move.l p2_xoff,d0
  4765.  move.l d0,PLR2_xoff
  4766.  move.l d0,newx
  4767.  move.l p2_zoff,d1
  4768.  move.l d1,newz
  4769.  move.l d1,PLR2_zoff
  4770.  
  4771.  move.l p2_height,PLR2_height
  4772.  
  4773.  sub.l d2,d0
  4774.  sub.l d3,d1
  4775.  move.l d0,xdiff
  4776.  move.l d1,zdiff
  4777.  move.w p2_angpos,d0
  4778.  move.w d0,PLR2_angpos
  4779.  
  4780.  move.l #SineTable,a1
  4781.  move.w (a1,d0.w),PLR2_sinval
  4782.  add.w #2048,d0
  4783.  and.w #8190,d0
  4784.  move.w (a1,d0.w),PLR2_cosval
  4785.  
  4786.  move.l p2_yoff,d0
  4787.  move.w p2_bobble,d1
  4788.  move.w (a1,d1.w),d1
  4789.  move.w d1,d3
  4790.  ble.s .notnegative
  4791.  neg.w d1
  4792. .notnegative:
  4793.  add.w #16384,d1
  4794.  asr.w #4,d1
  4795.  
  4796.  tst.b PLR2_Ducked
  4797.  bne.s .notdouble
  4798.  add.w d1,d1
  4799. .notdouble
  4800.  ext.l d1
  4801.  
  4802.  move.l d1,PLR2_BOBBLEY
  4803.  
  4804.  move.l PLR2_height,d4
  4805.  sub.l d1,d4
  4806.  add.l d1,d0
  4807.  
  4808.  cmp.b #'s',mors
  4809.  bne.s .otherwob
  4810.  asr.w #6,d3
  4811.  ext.l d3
  4812.  move.l d3,xwobble
  4813.  move.w PLR2_sinval,d1
  4814.  muls d3,d1
  4815.  move.w PLR2_cosval,d2
  4816.  muls d3,d2
  4817.  swap d1
  4818.  swap d2
  4819.  asr.w #7,d1
  4820.  move.w d1,xwobxoff
  4821.  asr.w #7,d2
  4822.  neg.w d2
  4823.  move.w d2,xwobzoff
  4824. .otherwob
  4825.  
  4826.  move.l d0,PLR2_yoff
  4827.  move.l d0,newy
  4828.  move.l d0,oldy
  4829.  
  4830.  move.l d4,thingheight
  4831.  move.l #40*256,StepUpVal
  4832.  tst.b PLR2_Ducked
  4833.  beq.s .okbigstep
  4834.  move.l #10*256,StepUpVal
  4835. .okbigstep:
  4836.  
  4837.  move.l #$1000000,StepDownVal
  4838.  
  4839.  move.l PLR2_Roompt,a0
  4840.  move.w ToTelZone(a0),d0
  4841.  blt .noteleport
  4842.  
  4843.  move.w ToTelX(a0),newx
  4844.  move.w ToTelZ(a0),newz
  4845.  move.w #-1,CollId
  4846.  move.l #%111111111111111111,CollideFlags
  4847.  bsr Collision
  4848.  tst.b hitwall
  4849.  beq.s .teleport
  4850.  
  4851.  move.w PLR2_xoff,newx
  4852.  move.w PLR2_zoff,newz
  4853.  bra .noteleport
  4854.  
  4855. .teleport:
  4856.  
  4857.  st PLR2_TELEPORTED
  4858.  
  4859.  move.l PLR2_Roompt,a0
  4860.  move.w ToTelZone(a0),d0
  4861.  move.w ToTelX(a0),PLR2_xoff
  4862.  move.w ToTelZ(a0),PLR2_zoff
  4863.  move.l PLR2_yoff,d1
  4864.  sub.l ToZoneFloor(a0),d1
  4865.  move.l ZoneAdds,a0
  4866.  move.l (a0,d0.w*4),a0
  4867.  add.l LEVELDATA,a0
  4868.  move.l a0,PLR2_Roompt
  4869.  add.l ToZoneFloor(a0),d1
  4870.  move.l d1,PLR2s_yoff
  4871.  move.l d1,PLR2_yoff
  4872.  move.l d1,PLR2s_tyoff
  4873.  move.l PLR2_xoff,PLR2s_xoff
  4874.  move.l PLR2_zoff,PLR2s_zoff
  4875.  
  4876.  SAVEREGS
  4877.  move.w #0,Noisex
  4878.  move.w #0,Noisez
  4879.  move.w #26,Samplenum
  4880.  move.w #100,Noisevol
  4881.  move.b #$fa,IDNUM
  4882.  jsr MakeSomeNoise
  4883.  GETREGS
  4884.  
  4885.  bra .cantmove
  4886.  
  4887. .noteleport:
  4888.  
  4889.  move.l PLR2_Roompt,objroom
  4890.  move.w #%100000000000,wallflags
  4891.  move.b PLR2_StoodInTop,StoodInTop
  4892.  
  4893.  move.l #%1011111010111100011,CollideFlags
  4894.  move.w #-1,CollId
  4895.  
  4896.  bsr Collision
  4897.  tst.b hitwall
  4898.  beq.s .nothitanything
  4899.  move.w oldx,PLR2_xoff
  4900.  move.w oldz,PLR2_zoff
  4901.  move.l PLR2_xoff,PLR2s_xoff
  4902.  move.l PLR2_zoff,PLR2s_zoff
  4903.  bra .cantmove
  4904. .nothitanything:
  4905.  
  4906.  move.w #40,extlen
  4907.  move.b #0,awayfromwall
  4908.  
  4909.  clr.b exitfirst
  4910.  clr.b wallbounce
  4911.  bsr MoveObject
  4912.  move.b StoodInTop,PLR2_StoodInTop
  4913.  move.l objroom,PLR2_Roompt
  4914.  move.w newx,PLR2_xoff
  4915.  move.w newz,PLR2_zoff
  4916.  move.l PLR2_xoff,PLR2s_xoff
  4917.  move.l PLR2_zoff,PLR2s_zoff
  4918.  
  4919. .cantmove
  4920.  
  4921.  move.l PLR2_Roompt,a0
  4922.  
  4923.  move.l ToZoneFloor(a0),d0
  4924.  tst.b PLR2_StoodInTop
  4925.  beq.s .notintop
  4926.  move.l ToUpperFloor(a0),d0
  4927. .notintop:
  4928.  
  4929.  adda.w #ToZonePts,a0
  4930.  sub.l PLR2_height,d0
  4931.  move.l d0,PLR2s_tyoff
  4932.  move.w p2_angpos,tmpangpos
  4933.  
  4934. ; move.l (a0),a0        ; jump to viewpoint list
  4935.  * A0 is pointing at a pointer to list of points to rotate
  4936.  move.w (a0)+,d1
  4937.  ext.l d1
  4938.  add.l PLR2_Roompt,d1
  4939.  move.l d1,PLR2_PointsToRotatePtr
  4940.  tst.w (a0)+
  4941.  sne.s DRAWNGRAPHTOP
  4942.  beq.s .nobackgraphics
  4943.  cmp.b #'s',mors
  4944.  bne.s .nobackgraphics
  4945.  move.l a0,-(a7)
  4946.  jsr putinbackdrop 
  4947.  move.l (a7)+,a0
  4948. .nobackgraphics:
  4949.  adda.w #10,a0
  4950.  move.l a0,PLR2_ListOfGraphRooms
  4951.  
  4952. *****************************************************
  4953.  rts
  4954.  
  4955.  
  4956. KeyMap: ds.b 256
  4957.  
  4958. fillscrnwater:
  4959.  dc.w 0
  4960. DONTDOGUN:
  4961.  dc.w 0
  4962.  
  4963. ;temptemp: ds.l 200
  4964. ;temptempptr: dc.l 0
  4965.  
  4966. DrawDisplay:
  4967.  
  4968. ; move.l #temptemp,temptempptr
  4969.  
  4970.  clr.b fillscrnwater
  4971.  
  4972.  move.l #SineTable,a0
  4973.  move.w angpos,d0
  4974.  move.w (a0,d0.w),d6
  4975.  adda.w #2048,a0
  4976.  move.w (a0,d0.w),d7
  4977.  move.w d6,sinval
  4978.  move.w d7,cosval
  4979.  
  4980.  move.l yoff,d0
  4981.  asr.l #8,d0
  4982.  move.w d0,d1
  4983.  add.w #256-32,d1
  4984.  and.w #255,d1
  4985.  move.w d1,wallyoff
  4986.  move.l yoff,d0
  4987.  asr.l #6,d0
  4988.  move.w d0,flooryoff
  4989.  
  4990.  move.w xoff,d6
  4991.  move.w d6,d3
  4992.  asr.w #1,d3
  4993.  add.w d3,d6
  4994.  asr.w #1,d6
  4995.  move.w d6,xoff34
  4996.  
  4997.  move.w zoff,d6
  4998.  move.w d6,d3
  4999.  asr.w #1,d3
  5000.  add.w d3,d6
  5001.  asr.w #1,d6
  5002.  move.w d6,zoff34
  5003.  
  5004.  bsr RotateLevelPts
  5005.  bsr RotateObjectPts
  5006.  bsr CalcPLR1InLine
  5007.  
  5008.  
  5009.  cmp.b #'n',mors
  5010.  bne.s doplr2too
  5011.  move.l PLR2_Obj,a0
  5012.  move.w #-1,12(a0)
  5013.  move.w #-1,GraphicRoom(a0)
  5014.  bra noplr2either
  5015.  
  5016. doplr2too:
  5017.  bsr CalcPLR2InLine
  5018. noplr2either:
  5019.  
  5020.  move.l endoflist,a0
  5021. ; move.w #-1,(a0)
  5022.  
  5023. ; move.l #FinalOrder,a0
  5024.  
  5025.  
  5026. subroomloop:
  5027. ; move.w (a0)+,d7
  5028.  move.w -(a0),d7
  5029.  blt jumpoutofrooms
  5030.  
  5031. ; bsr setlrclip
  5032. ; move.w leftclip,d0
  5033. ; cmp.w rightclip,d0
  5034. ; bge subroomloop
  5035.  move.l a0,-(a7)
  5036.  
  5037.  move.l ZoneAdds,a0
  5038.  move.l (a0,d7.w*4),a0
  5039.  add.l LEVELDATA,a0
  5040.  move.l ToZoneRoof(a0),SplitHeight
  5041.  move.l a0,ROOMBACK
  5042.  
  5043.  move.l ZoneGraphAdds,a0
  5044.  move.l 4(a0,d7.w*8),a2
  5045.  move.l (a0,d7.w*8),a0
  5046.  
  5047.  add.l LEVELGRAPHICS,a0
  5048.  add.l LEVELGRAPHICS,a2
  5049.  move.l a2,ThisRoomToDraw+4
  5050.  move.l a0,ThisRoomToDraw
  5051.  
  5052.  move.l ListOfGraphRooms,a1
  5053.  
  5054.  
  5055.  
  5056. finditit:
  5057.  tst.w (a1)
  5058.  blt nomoretodoatall
  5059.  cmp.w (a1),d7
  5060.  beq outoffind
  5061.  adda.w #8,a1
  5062.  bra finditit
  5063.  
  5064. outoffind:
  5065.  
  5066.  move.l a1,-(a7)
  5067.  
  5068.  
  5069.  move.w #0,leftclip
  5070.  move.w RIGHTX,rightclip
  5071.  moveq #0,d7
  5072.  move.w 2(a1),d7
  5073.  blt.s outofrcliplop
  5074.  move.l LEVELCLIPS,a0
  5075.  lea (a0,d7.l*2),a0
  5076.  
  5077.  tst.w (a0)
  5078.  blt outoflcliplop
  5079.  
  5080.  bsr NEWsetlclip
  5081.  
  5082. intolcliplop:        ; clips
  5083.  tst.w (a0)
  5084.  blt outoflcliplop
  5085.  
  5086.  bsr NEWsetlclip 
  5087.  bra intolcliplop
  5088.  
  5089. outoflcliplop:
  5090.  
  5091.  addq #2,a0
  5092.  
  5093.  tst.w (a0)
  5094.  blt outofrcliplop
  5095.  
  5096.  bsr NEWsetrclip
  5097.  
  5098. intorcliplop:        ; clips
  5099.  tst.w (a0)
  5100.  blt outofrcliplop
  5101.  
  5102.  bsr NEWsetrclip 
  5103.  bra intorcliplop
  5104.  
  5105. outofrcliplop:
  5106.  
  5107.  
  5108.  move.w leftclip,d0
  5109.  cmp.w RIGHTX,d0
  5110.  bge dontbothercantseeit
  5111.  move.w rightclip,d1
  5112.  blt dontbothercantseeit
  5113.  cmp.w d1,d0
  5114.  bge dontbothercantseeit
  5115.  
  5116.  move.l yoff,d0
  5117.  cmp.l SplitHeight,d0
  5118.  blt botfirst
  5119.  
  5120.  move.l ThisRoomToDraw+4,a0
  5121.  cmp.l LEVELGRAPHICS,a0
  5122.  beq.s noupperroom
  5123.  st DOUPPER
  5124.  
  5125.  move.l ROOMBACK,a1
  5126.  move.l ToUpperRoof(a1),TOPOFROOM
  5127.  move.l ToUpperFloor(a1),BOTOFROOM
  5128.  
  5129.  move.l #CurrentPointBrights+4,PointBrightsPtr
  5130.  bsr dothisroom
  5131. noupperroom:
  5132.  move.l ThisRoomToDraw,a0
  5133.  clr.b DOUPPER
  5134.  move.l #CurrentPointBrights,PointBrightsPtr
  5135.  
  5136.  move.l ROOMBACK,a1
  5137.  move.l ToZoneRoof(a1),d0
  5138.  move.l d0,TOPOFROOM
  5139.  move.l ToZoneFloor(a1),d1
  5140.  move.l d1,BOTOFROOM
  5141.  
  5142.  move.l ToZoneWater(a1),d2
  5143.  cmp.l yoff,d2
  5144.  blt.s .abovefirst
  5145.  move.l d2,BEFOREWATTOP
  5146.  move.l d1,BEFOREWATBOT
  5147.  move.l d2,AFTERWATBOT
  5148.  move.l d0,AFTERWATTOP
  5149.  bra.s .belowfirst
  5150. .abovefirst:
  5151.  move.l d0,BEFOREWATTOP
  5152.  move.l d2,BEFOREWATBOT
  5153.  move.l d1,AFTERWATBOT
  5154.  move.l d2,AFTERWATTOP
  5155. .belowfirst:
  5156.  
  5157.  bsr dothisroom
  5158.  
  5159.  bra dontbothercantseeit
  5160. botfirst:
  5161.  
  5162.  move.l ThisRoomToDraw,a0
  5163.  clr.b DOUPPER
  5164.  move.l #CurrentPointBrights,PointBrightsPtr
  5165.  
  5166.  move.l ROOMBACK,a1
  5167.  move.l ToZoneRoof(a1),d0
  5168.  move.l d0,TOPOFROOM
  5169.  move.l ToZoneFloor(a1),d1
  5170.  move.l d1,BOTOFROOM
  5171.  
  5172.  move.l ToZoneWater(a1),d2
  5173.  cmp.l yoff,d2
  5174.  blt.s .abovefirst
  5175.  move.l d2,BEFOREWATTOP
  5176.  move.l d1,BEFOREWATBOT
  5177.  move.l d2,AFTERWATBOT
  5178.  move.l d0,AFTERWATTOP
  5179.  bra.s .belowfirst
  5180. .abovefirst:
  5181.  move.l d0,BEFOREWATTOP
  5182.  move.l d2,BEFOREWATBOT
  5183.  move.l d1,AFTERWATBOT
  5184.  move.l d2,AFTERWATTOP
  5185. .belowfirst:
  5186.  
  5187.  
  5188.  bsr dothisroom
  5189.  move.l ThisRoomToDraw+4,a0
  5190.  cmp.l LEVELGRAPHICS,a0
  5191.  beq.s noupperroom2
  5192.  move.l #CurrentPointBrights+4,PointBrightsPtr
  5193.  
  5194.  move.l ROOMBACK,a1
  5195.  move.l ToUpperRoof(a1),TOPOFROOM
  5196.  move.l ToUpperFloor(a1),BOTOFROOM
  5197.  
  5198.  st DOUPPER
  5199.  bsr dothisroom
  5200. noupperroom2:
  5201.  
  5202. dontbothercantseeit:
  5203. pastemp:
  5204.  
  5205.  move.l (a7)+,a1
  5206.  move.l ThisRoomToDraw,a0
  5207.  move.w (a0),d7
  5208.  
  5209.  adda.w #8,a1
  5210.  bra finditit
  5211.  
  5212. nomoretodoatall:
  5213.  
  5214.  move.l (a7)+,a0
  5215.  
  5216.  bra subroomloop
  5217.  
  5218. jumpoutofrooms:
  5219.  
  5220.  
  5221.  tst.b DONTDOGUN
  5222.  bne NOGUNLOOK
  5223.  
  5224.  cmp.b #'s',mors
  5225.  beq.s drawslavegun
  5226.  
  5227.  moveq #0,d0
  5228.  move.b PLR1_GunSelected,d0
  5229.  moveq #0,d1
  5230.  move.b PLR1_GunFrame,d1
  5231. ; bsr DRAWINGUN
  5232.  bra drawngun
  5233.  
  5234. drawslavegun
  5235.  moveq #0,d0
  5236.  move.b PLR2_GunSelected,d0
  5237.  moveq #0,d1
  5238.  move.b PLR2_GunFrame,d1
  5239. ; bsr DRAWINGUN
  5240.  
  5241. drawngun:
  5242.  
  5243. NOGUNLOOK:
  5244.  
  5245.  moveq #0,d1
  5246.  move.b PLR1_GunFrame,d1
  5247.  sub.w TempFrames,d1
  5248.  bgt.s .nn
  5249.  moveq #0,d1
  5250. .nn
  5251.  move.b d1,PLR1_GunFrame
  5252.  
  5253.  ble.s .donefire
  5254.  sub.b #1,PLR1_GunFrame
  5255. .donefire:
  5256.  
  5257.  moveq #0,d1
  5258.  move.b PLR2_GunFrame,d1
  5259.  sub.w TempFrames,d1
  5260.  bgt.s .nn2
  5261.  moveq #0,d1
  5262. .nn2
  5263.  move.b d2,PLR2_GunFrame
  5264.  
  5265.  ble.s .donefire2
  5266.  sub.b #1,PLR2_GunFrame
  5267. .donefire2:
  5268.  
  5269.  tst.b DOANYWATER
  5270.  beq.s nowaterfull
  5271.  
  5272.  move.w #231,d0
  5273.  move.l FASTBUFFER,a0
  5274.  tst.b fillscrnwater
  5275.  beq nowaterfull
  5276.  bgt oknothalf
  5277.  moveq #119,d0
  5278.  add.l #320*120*2,a0
  5279. oknothalf:
  5280.  
  5281.  bclr.b #1,$bfe001
  5282.  
  5283.  move.l #brightentab+512*4,a2
  5284.  moveq #0,d2
  5285.  
  5286.  tst.b FULLSCR
  5287.  bne.s DOALLSCREEN
  5288.  
  5289. DOSOMESCREEN:
  5290.  
  5291.  move.w #159,d0
  5292. .fw:
  5293.  move.w #191,d1
  5294. .fwa:
  5295.  move.b (a0),d2
  5296.  move.b (a2,d2.w*2),(a0)+
  5297.  dbra d1,.fwa
  5298.  add.w #(320-192),a0
  5299.  dbra d0,.fw
  5300.  rts
  5301.  
  5302. DOALLSCREEN:
  5303.  
  5304. fw:
  5305.  move.w #287,d1
  5306. fwa:
  5307.  move.b (a0),d2
  5308.  move.b (a2,d2.w*2),(a0)+
  5309.  dbra d1,fwa
  5310.  add.w #32,a0
  5311.  dbra d0,fw
  5312.  
  5313. ; move.l frompt,a0
  5314. ; add.l #104*4*60,a0
  5315. ; move.w #31,d0
  5316. ;fw:
  5317. ; move.w d5,d1
  5318. ; move.l a0,a1
  5319. ;fwd:
  5320. ;val SET 104*4*19
  5321. ; REPT 20
  5322. ; and.w #$ff,val(a1)
  5323. ;val SET val-104*4
  5324. ; ENDR
  5325. ; sub.l #104*4*20,a1
  5326. ; dbra d1,fwd
  5327. ; addq #4,a0
  5328. ; dbra d0,fw
  5329. ;
  5330. ; addq #4,a0
  5331. ;
  5332. ; move.w #31,d0
  5333. ;sw:
  5334. ; move.w d5,d1
  5335. ; move.l a0,a1
  5336. ;swd:
  5337. ;val SET 104*4*19
  5338. ; REPT 20
  5339. ; and.w #$ff,val(a1)
  5340. ;val SET val-104*4
  5341. ; ENDR
  5342. ; sub.l #104*4*20,a1
  5343. ; dbra d1,swd
  5344. ; addq #4,a0
  5345. ; dbra d0,sw
  5346. ;
  5347. ; addq #4,a0
  5348. ;
  5349. ; move.w #31,d0
  5350. ;tw:
  5351. ; move.w d5,d1
  5352. ; move.l a0,a1
  5353. ;twd:
  5354. ;val SET 104*4*19
  5355. ; REPT 20
  5356. ; and.w #$ff,val(a1)
  5357. ;val SET val-104*4
  5358. ; ENDR
  5359. ; sub.l #104*4*20,a1
  5360. ; dbra d1,twd
  5361. ; addq #4,a0
  5362. ; dbra d0,tw
  5363. ;
  5364.  rts
  5365.  
  5366. nowaterfull:
  5367.  bset.b #1,$bfe001
  5368.  rts
  5369.  
  5370. prot9: dc.w 0
  5371.  
  5372. ;TempBuffer: ds.l 100 
  5373.  
  5374. prot8: dc.w 0
  5375.  
  5376. ClipTable: ds.l 30
  5377. EndOfClipPt: dc.l 0
  5378. DOUPPER: dc.w 0
  5379.  
  5380. RealTable:
  5381.  dc.l prot1-78935450
  5382.  dc.l prot2-78935450
  5383.  dc.l prot3-78935450
  5384.  dc.l prot4-78935450
  5385.  dc.l prot5-78935450
  5386.  dc.l prot6-78935450
  5387.  dc.l prot7-78935450
  5388.  dc.l prot8-78935450
  5389.  dc.l prot9-78935450
  5390.  dc.l protA-78935450
  5391.  
  5392. dothisroom
  5393.  
  5394.  move.w (a0)+,d0
  5395.  move.w d0,currzone
  5396.  move.w d0,d1
  5397.  muls #40,d1
  5398.  add.l #BIGMAP,d1
  5399.  move.l d1,BIGPTR
  5400.  move.w d0,d1
  5401.  ext.l d1
  5402.  asl.w #2,d1
  5403.  add.l #COMPACTMAP,d1
  5404.  move.l d1,COMPACTPTR
  5405.  add.l #4,d1
  5406.  cmp.l LASTZONE,d1
  5407.  ble.s .nochange
  5408.  move.l d1,LASTZONE
  5409. .nochange:
  5410.  
  5411.  move.l #ZoneBrightTable,a1
  5412.  move.l (a1,d0.w*4),d1
  5413.  tst.b DOUPPER
  5414.  bne.s .okbot
  5415.  swap d1
  5416. .okbot:
  5417.  move.w d1,ZoneBright
  5418.  
  5419. polyloop:
  5420.  move.w (a0)+,d0
  5421.  move.w d0,WALLIDENT
  5422.  and.w #$ff,d0
  5423.  tst.b d0
  5424.  blt jumpoutofloop
  5425.  beq itsawall
  5426.  cmp.w #3,d0
  5427.  beq itsasetclip
  5428.  blt itsafloor
  5429.  cmp.w #4,d0
  5430.  beq itsanobject
  5431.  cmp.w #5,d0
  5432.  beq itsanarc
  5433.  cmp.w #6,d0
  5434.  beq itsalightbeam
  5435.  cmp.w #7,d0
  5436.  beq.s itswater
  5437.  cmp.w #9,d0
  5438.  ble itsachunkyfloor
  5439.  cmp.w #11,d0
  5440.  ble itsabumpyfloor
  5441.  cmp.w #12,d0
  5442.  beq.s itsbackdrop
  5443.  cmp.w #13,d0
  5444.  beq.s itsaseewall
  5445.  
  5446.  bra polyloop
  5447.  
  5448. itsaseewall:
  5449.  st seethru
  5450.  jsr itsawalldraw
  5451.  bra polyloop
  5452.  
  5453. itsbackdrop:
  5454.  jsr putinbackdrop
  5455.  bra polyloop
  5456.  
  5457. itswater:
  5458.  PROTHCHECK
  5459.  move.w #2,SMALLIT
  5460.  move.w #3,d0
  5461.  clr.b gourfloor
  5462.  move.l #FloorLine,LineToUse
  5463.  st usewater
  5464.  clr.b usebumps
  5465.  jsr itsafloordraw
  5466.  bra polyloop
  5467.  
  5468. itsanarc:
  5469.  jsr CurveDraw
  5470.  bra polyloop
  5471.  
  5472. itsanobject:
  5473.  jsr ObjDraw
  5474.  bra polyloop
  5475.  
  5476. itsalightbeam:
  5477.  jsr LightDraw
  5478.  bra polyloop
  5479.  
  5480. itsabumpyfloor:
  5481.  move.w #1,SMALLIT
  5482.  sub.w #9,d0
  5483.  st usebumps
  5484.  st smoothbumps
  5485.  clr.b usewater
  5486.  move.l #BumpLine,LineToUse
  5487.  jsr itsafloordraw
  5488.  bra polyloop
  5489.  
  5490. itsachunkyfloor:
  5491.  move.w #1,SMALLIT
  5492.  subq.w #7,d0
  5493.  st usebumps
  5494.  sub.w #12,topclip
  5495. ; add.w #10,botclip
  5496.  clr.b smoothbumps
  5497.  clr.b usewater
  5498.  move.l #BumpLine,LineToUse
  5499.  jsr itsafloordraw
  5500.  add.w #12,topclip
  5501. ; sub.w #10,botclip
  5502.  bra polyloop 
  5503.  
  5504. itsafloor:
  5505.  
  5506.  move.l PointBrightsPtr,FloorPtBrights
  5507.  
  5508.  move.w currzone,d1
  5509.  muls #80,d1
  5510.  
  5511.  cmp.w #2,d0
  5512.  bne.s .nfl
  5513.  add.l #2,d1
  5514. .nfl
  5515.  add.l d1,FloorPtBrights
  5516.  
  5517.  move.w #1,SMALLIT
  5518.  
  5519.  movem.l a0/d0,-(a7)
  5520.  move.l $4.w,a6
  5521.  jsr _LVOSuperState(a6)
  5522.  move.l d0,SSTACK
  5523.  movem.l (a7)+,a0/d0
  5524.  
  5525.  move.l #FloorLine,LineToUse
  5526. * 1,2 = floor/roof
  5527.  clr.b usewater
  5528.  clr.b usebumps
  5529.  move.b GOURSEL,gourfloor    
  5530.  jsr itsafloordraw
  5531.  move.l a0,-(a7)
  5532.  move.l $4.w,a6
  5533.  move.l SSTACK,d0
  5534.  jsr _LVOUserState(a6)
  5535.  move.l (a7)+,a0
  5536.  bra polyloop
  5537. itsasetclip:
  5538.  bra polyloop
  5539. itsawall:
  5540.  clr.b seethru
  5541. ; move.l #stripbuffer,a1
  5542.  jsr itsawalldraw
  5543.  bra polyloop
  5544.  
  5545. jumpoutofloop:
  5546.  rts
  5547.  
  5548. LASTZONE: dc.l 0
  5549. COMPACTPTR: dc.l 0
  5550. BIGPTR: dc.l 0
  5551. WALLIDENT: dc.w 0
  5552. SMALLIT: dc.w 0
  5553. GOURSEL: dc.w 0
  5554. ThisRoomToDraw: dc.l 0,0
  5555. SplitHeight: dc.l 0
  5556.  
  5557.  include "ab3:source_4000/OrderZones"
  5558.  
  5559. ReadMouse:
  5560.  move.l #$dff000,a6
  5561.  clr.l d0
  5562.  clr.l d1
  5563.  move.w $a(a6),d0
  5564.  lsr.w #8,d0
  5565.  ext.l d0
  5566.  move.w d0,d3
  5567.  move.w oldmy,d2
  5568.  sub.w d2,d0
  5569.  
  5570.  cmp.w #127,d0
  5571.  blt nonegy
  5572.  move.w #255,d1
  5573.  sub.w d0,d1
  5574.  move.w d1,d0
  5575.  neg.w d0
  5576. nonegy:
  5577.  
  5578.  cmp.w #-127,d0
  5579.  bge nonegy2
  5580.  move.w #255,d1
  5581.  add.w d0,d1
  5582.  move.w d1,d0
  5583. nonegy2:
  5584.  
  5585.  add.b d0,d2
  5586.  add.w d0,oldy2
  5587.  move.w d2,oldmy
  5588.  move.w d2,d0
  5589.  
  5590.  move.w oldy2,d0
  5591.  move.w d0,ymouse
  5592.  
  5593.  clr.l d0
  5594.  clr.l d1
  5595.  move.w $a(a6),d0
  5596.  ext.w d0
  5597.  ext.l d0
  5598.  move.w d0,d3
  5599.  move.w oldmx,d2
  5600.  sub.w d2,d0
  5601.  
  5602.  cmp.w #127,d0
  5603.  blt nonegx
  5604.  move.w #255,d1
  5605.  sub.w d0,d1
  5606.  move.w d1,d0
  5607.  neg.w d0
  5608. nonegx:
  5609.  
  5610.  cmp.w #-127,d0
  5611.  bge nonegx2
  5612.  move.w #255,d1
  5613.  add.w d0,d1
  5614.  move.w d1,d0
  5615. nonegx2:
  5616.  
  5617.  add.b d0,d2
  5618.  move.w d0,d1
  5619.  move.w d2,oldmx
  5620.  
  5621.  move.w #$0,$dff034
  5622.  
  5623.  add.w d0,oldx2
  5624.  move.w oldx2,d0
  5625.  and.w #2047,d0
  5626.  move.w d0,oldx2
  5627.  
  5628.  asl.w #2,d0
  5629.  sub.w prevx,d0
  5630.  add.w d0,prevx
  5631.  add.w d0,angpos
  5632.  move.w #0,lrs
  5633.  rts
  5634.  
  5635. noturn:
  5636.  
  5637. ; got to move lr instead. 
  5638.  
  5639. ; d1 = speed moved l/r
  5640.  
  5641.  move.w d1,lrs
  5642.  
  5643.  rts
  5644.  
  5645. lrs: dc.w 0
  5646. prevx: dc.w 0
  5647.  
  5648. angpos: dc.w 0
  5649. mang: dc.w 0
  5650. oldymouse: dc.w 0
  5651. xmouse: dc.w 0
  5652. ymouse: dc.w 0
  5653. oldx2: dc.w 0
  5654. oldmx: dc.w 0
  5655. oldmy: dc.w 0
  5656. oldy2: dc.w 0
  5657.  
  5658. MAPON: dc.w $0
  5659. REALMAPON: dc.w 0
  5660.  
  5661. RotateLevelPts:
  5662.  
  5663.  tst.b REALMAPON
  5664.  beq ONLYTHELONELY
  5665.  
  5666.  move.w sinval,d6
  5667.  swap d6
  5668.  move.w cosval,d6
  5669.  move.l Points,a3
  5670.  move.l #Rotated,a1
  5671.  move.l #OnScreen,a2
  5672.  move.w xoff,d4
  5673.  move.w zoff,d5
  5674.  
  5675. ; move.w #$c40,$dff106
  5676. ; move.w #$f00,$dff180
  5677.  
  5678.  move.w NumLevPts,d7
  5679.  
  5680.  tst.b FULLSCR
  5681.  bne BIGALL
  5682.  
  5683. pointrotlop2:
  5684.  move.w (a3)+,d0
  5685.  sub.w d4,d0
  5686.  move.w d0,d2
  5687.  move.w (a3)+,d1
  5688.  sub.w d5,d1
  5689.  muls d6,d2
  5690.  swap d6
  5691.  move.w d1,d3
  5692.  muls d6,d3
  5693.  sub.l d3,d2
  5694.  add.l d2,d2
  5695.  swap d2
  5696.  ext.l d2
  5697.  asl.l #7,d2
  5698.  add.l xwobble,d2
  5699.  move.l d2,(a1)+
  5700.  
  5701.  muls d6,d0
  5702.  swap d6
  5703.  muls d6,d1
  5704.  add.l d0,d1
  5705.  asl.l #1,d1
  5706.  swap d1
  5707. ; ext.l d1
  5708. ; divs #3,d1
  5709.  move.l d1,(a1)+
  5710.  
  5711.  tst.w d1
  5712.  bgt.s ptnotbehind
  5713.  tst.w d2
  5714.  bgt.s onrightsomewhere
  5715.  move.w #0,d2
  5716.  bra putin
  5717. onrightsomewhere:
  5718.  move.w RIGHTX,d2
  5719.  bra putin
  5720. ptnotbehind:
  5721.  
  5722.  divs d1,d2
  5723.  add.w MIDDLEX,d2
  5724. putin:
  5725.  move.w d2,(a2)+
  5726.  
  5727.  dbra d7,pointrotlop2
  5728. outofpointrot:
  5729.   rts
  5730.  
  5731.  
  5732. BIGALL:
  5733.  
  5734. pointrotlop2B:
  5735.  move.w (a3)+,d0
  5736.  sub.w d4,d0
  5737.  move.w d0,d2
  5738.  move.w (a3)+,d1
  5739.  sub.w d5,d1
  5740.  muls d6,d2
  5741.  swap d6
  5742.  move.w d1,d3
  5743.  muls d6,d3
  5744.  sub.l d3,d2
  5745.  add.l d2,d2
  5746.  swap d2
  5747.  ext.l d2
  5748.  asl.l #7,d2
  5749.  add.l xwobble,d2
  5750.  move.l d2,(a1)+
  5751.  
  5752.  muls d6,d0
  5753.  swap d6
  5754.  muls d6,d1
  5755.  add.l d0,d1
  5756.  asl.l #2,d1
  5757.  swap d1
  5758.  ext.l d1
  5759.  divs #3,d1
  5760.  move.l d1,(a1)+
  5761.  
  5762.  tst.w d1
  5763.  bgt.s ptnotbehindB
  5764.  tst.w d2
  5765.  bgt.s onrightsomewhereB
  5766.  move.w #0,d2
  5767.  bra putinB
  5768. onrightsomewhereB:
  5769.  move.w RIGHTX,d2
  5770.  bra putinB
  5771. ptnotbehindB:
  5772.  
  5773.  divs d1,d2
  5774.  add.w MIDDLEX,d2
  5775. putinB:
  5776.  move.w d2,(a2)+
  5777.  
  5778.  dbra d7,pointrotlop2B
  5779.   rts
  5780.  
  5781.  
  5782. ONLYTHELONELY:
  5783.  
  5784.  move.w sinval,d6
  5785.  swap d6
  5786.  move.w cosval,d6
  5787.  
  5788.  move.l PointsToRotatePtr,a0
  5789.  move.l Points,a3
  5790.  move.l #Rotated,a1
  5791.  move.l #OnScreen,a2
  5792.  move.w xoff,d4
  5793.  move.w zoff,d5
  5794.  
  5795. ; move.w #$c40,$dff106
  5796. ; move.w #$f00,$dff180
  5797.  
  5798.  tst.b FULLSCR
  5799.  bne BIGLONELY
  5800.  
  5801. pointrotlop:
  5802.  move.w (a0)+,d7
  5803.  blt outofpointrot
  5804.  
  5805.  move.w (a3,d7*4),d0
  5806.  sub.w d4,d0
  5807.  move.w d0,d2
  5808.  move.w 2(a3,d7*4),d1
  5809.  sub.w d5,d1
  5810.  muls d6,d2
  5811.  swap d6
  5812.  move.w d1,d3
  5813.  muls d6,d3
  5814.  sub.l d3,d2
  5815.  add.l d2,d2
  5816.  swap d2
  5817.  ext.l d2
  5818.  asl.l #7,d2
  5819.  add.l xwobble,d2
  5820.  move.l d2,(a1,d7*8)
  5821.  
  5822.  muls d6,d0
  5823.  swap d6
  5824.  muls d6,d1
  5825.  add.l d0,d1
  5826.  asl.l #1,d1
  5827.  swap d1
  5828. ; ext.l d1
  5829. ; divs #3,d1
  5830.  move.l d1,4(a1,d7*8)
  5831.  
  5832.  tst.w d1
  5833.  bgt.s .ptnotbehind
  5834.  tst.w d2
  5835.  bgt.s .onrightsomewhere
  5836.  move.w #0,d2
  5837.  bra .putin
  5838. .onrightsomewhere:
  5839.  move.w RIGHTX,d2
  5840.  bra .putin
  5841. .ptnotbehind:
  5842.  
  5843.  divs d1,d2
  5844.  add.w MIDDLEX,d2
  5845. .putin:
  5846.  move.w d2,(a2,d7*2)
  5847.  
  5848.  bra pointrotlop
  5849.  
  5850. ; move.w #$c40,$dff106
  5851. ; move.w #$ff0,$dff180
  5852.  
  5853.  rts
  5854.  
  5855. BIGLONELY:
  5856.  
  5857. .pointrotlop:
  5858.  move.w (a0)+,d7
  5859.  blt.s .outofpointrot
  5860.  
  5861.  move.w (a3,d7*4),d0
  5862.  sub.w d4,d0
  5863.  move.w d0,d2
  5864.  move.w 2(a3,d7*4),d1
  5865.  sub.w d5,d1
  5866.  muls d6,d2
  5867.  swap d6
  5868.  move.w d1,d3
  5869.  muls d6,d3
  5870.  sub.l d3,d2
  5871.  add.l d2,d2
  5872.  swap d2
  5873.  ext.l d2
  5874.  asl.l #7,d2
  5875.  add.l xwobble,d2
  5876.  move.l d2,(a1,d7*8)
  5877.  
  5878.  muls d6,d0
  5879.  swap d6
  5880.  muls d6,d1
  5881.  add.l d0,d1
  5882.  asl.l #2,d1
  5883.  swap d1
  5884.  ext.l d1
  5885.  divs #3,d1
  5886.  move.l d1,4(a1,d7*8)
  5887.  
  5888.  tst.w d1
  5889.  bgt.s .ptnotbehind
  5890.  tst.w d2
  5891.  bgt.s .onrightsomewhere
  5892.  move.w #0,d2
  5893.  bra .putin
  5894. .onrightsomewhere:
  5895.  move.w RIGHTX,d2
  5896.  bra .putin
  5897. .ptnotbehind:
  5898.  
  5899.  divs d1,d2
  5900.  add.w MIDDLEX,d2
  5901. .putin:
  5902.  move.w d2,(a2,d7*2)
  5903.  
  5904.  bra .pointrotlop
  5905.  
  5906. .outofpointrot:
  5907. ; move.w #$c40,$dff106
  5908. ; move.w #$ff0,$dff180
  5909.  
  5910.  rts
  5911.  
  5912.  
  5913. PLR1_ObjDists
  5914.  ds.w 250
  5915. PLR2_ObjDists
  5916.  ds.w 250
  5917.  
  5918. CalcPLR1InLine:
  5919.  
  5920.  move.w PLR1_sinval,d5
  5921.  move.w PLR1_cosval,d6
  5922.  move.l ObjectData,a4
  5923.  move.l ObjectPoints,a0
  5924.  move.w NumObjectPoints,d7
  5925.  move.l #PLR1_ObsInLine,a2
  5926.  move.l #PLR1_ObjDists,a3
  5927.  
  5928. .objpointrotlop:
  5929.  
  5930.  cmp.b #3,16(a4)
  5931.  beq.s .itaux
  5932.  
  5933.  move.w (a0),d0
  5934.  sub.w PLR1_xoff,d0
  5935.  move.w 4(a0),d1
  5936.  addq #8,a0
  5937.  
  5938.  tst.w 12(a4)
  5939.  blt .noworkout
  5940.  
  5941.  moveq #0,d2
  5942.  move.b 16(a4),d2
  5943.  ;move.l #ColBoxTable,a6
  5944.  ;lea (a6,d2.w*8),a6
  5945.  
  5946.  sub.w PLR1_zoff,d1
  5947.  move.w d0,d2
  5948.  muls d6,d2
  5949.  move.w d1,d3
  5950.  muls d5,d3
  5951.  sub.l d3,d2
  5952.  add.l d2,d2
  5953.  
  5954.  bgt.s .okh
  5955.  neg.l d2
  5956. .okh:
  5957.  swap d2
  5958.  
  5959.  muls d5,d0
  5960.  muls d6,d1
  5961.  add.l d0,d1
  5962.  asl.l #2,d1
  5963.  swap d1
  5964.  moveq #0,d3
  5965.  
  5966.  tst.w d1
  5967.  ble.s .notinline
  5968.  asr.w #1,d2
  5969.  cmp.w #80,d2
  5970.  bgt.s .notinline
  5971.  
  5972.  st d3
  5973. .notinline
  5974.  move.b d3,(a2)+
  5975.  
  5976.  move.w d1,(a3)+
  5977.  
  5978.  add.w #64,a4
  5979.  dbra d7,.objpointrotlop
  5980.  
  5981.  rts
  5982.  
  5983. .itaux:
  5984.  add.w #64,a4
  5985.  bra .objpointrotlop
  5986.  
  5987. .noworkout:
  5988.  move.b #0,(a2)+
  5989.  move.w #0,(a3)+
  5990.  add.w #64,a4
  5991.  dbra d7,.objpointrotlop
  5992.  rts
  5993.  
  5994.  
  5995. CalcPLR2InLine:
  5996.  
  5997.  move.w PLR2_sinval,d5
  5998.  move.w PLR2_cosval,d6
  5999.  move.l ObjectData,a4
  6000.  move.l ObjectPoints,a0
  6001.  move.w NumObjectPoints,d7
  6002.  move.l #PLR2_ObsInLine,a2
  6003.  move.l #PLR2_ObjDists,a3
  6004.  
  6005. .objpointrotlop:
  6006.  
  6007.  cmp.b #3,16(a4)
  6008.  beq.s .itaux
  6009.  
  6010.  move.w (a0),d0
  6011.  sub.w PLR2_xoff,d0
  6012.  move.w 4(a0),d1
  6013.  addq #8,a0
  6014.  
  6015.  tst.w 12(a4)
  6016.  blt .noworkout
  6017.  
  6018.  moveq #0,d2
  6019.  move.b 16(a4),d2
  6020. ; move.l #ColBoxTable,a6
  6021. ; lea (a6,d2.w*8),a6
  6022.  
  6023.  sub.w PLR2_zoff,d1
  6024.  move.w d0,d2
  6025.  muls d6,d2
  6026.  move.w d1,d3
  6027.  muls d5,d3
  6028.  sub.l d3,d2
  6029.  add.l d2,d2
  6030.  
  6031.  bgt.s .okh
  6032.  neg.l d2
  6033. .okh:
  6034.  swap d2
  6035.  
  6036.  muls d5,d0
  6037.  muls d6,d1
  6038.  add.l d0,d1
  6039.  asl.l #2,d1
  6040.  swap d1
  6041.  moveq #0,d3
  6042.  
  6043.  tst.w d1
  6044.  ble.s .notinline
  6045.  asr.w #1,d2
  6046.  cmp.w (a6),d2
  6047.  bgt.s .notinline
  6048.  
  6049.  st d3
  6050. .notinline
  6051.  move.b d3,(a2)+
  6052.  
  6053.  move.w d1,(a3)+
  6054.  
  6055.  add.w #64,a4
  6056.  dbra d7,.objpointrotlop
  6057.  
  6058.  rts
  6059.  
  6060. .itaux:
  6061.  add.w #64,a4
  6062.  bra .objpointrotlop
  6063.  
  6064. .noworkout:
  6065.  move.w #0,(a3)+
  6066.  move.b #0,(a2)+
  6067.  add.w #64,a4
  6068.  dbra d7,.objpointrotlop
  6069.  rts
  6070.  
  6071.  
  6072. RotateObjectPts:
  6073.  
  6074.  move.w sinval,d5
  6075.  move.w cosval,d6
  6076.  
  6077.  move.l ObjectData,a4
  6078.  move.l ObjectPoints,a0
  6079.  move.w NumObjectPoints,d7
  6080.  move.l #ObjRotated,a1
  6081.  
  6082.  tst.b FULLSCR
  6083.  bne BIGOBJPTS
  6084.  
  6085.  
  6086. .objpointrotlop:
  6087.  
  6088.  cmp.b #3,16(a4)
  6089.  beq.s .itaux
  6090.  
  6091.  move.w (a0),d0
  6092.  sub.w xoff,d0
  6093.  move.w 4(a0),d1
  6094.  addq #8,a0
  6095.  
  6096.  tst.w 12(a4)
  6097.  blt .noworkout
  6098.  
  6099.  sub.w zoff,d1
  6100.  
  6101.  move.w d0,d2
  6102.  muls d6,d2
  6103.  move.w d1,d3
  6104.  muls d5,d3
  6105.  sub.l d3,d2
  6106.  
  6107.  
  6108.  add.l d2,d2
  6109.  swap d2
  6110.  move.w d2,(a1)+
  6111.  
  6112.  muls d5,d0
  6113.  muls d6,d1
  6114.  add.l d0,d1
  6115.  asl.l #1,d1
  6116.  swap d1
  6117. ; ext.l d1
  6118. ; divs #3,d1
  6119.  moveq #0,d3
  6120.  
  6121.  move.w d1,(a1)+
  6122.  ext.l d2
  6123.  asl.l #7,d2
  6124.  add.l xwobble,d2
  6125.  move.l d2,(a1)+
  6126.  
  6127.  dbra d7,.objpointrotlop
  6128.  
  6129.  rts
  6130.  
  6131. .itaux:
  6132.  add.w #64,a4
  6133.  bra .objpointrotlop
  6134.  
  6135. .noworkout:
  6136.   move.l #0,(a1)+
  6137.   move.l #0,(a1)+
  6138.   add.w #64,a4
  6139.   dbra d7,.objpointrotlop
  6140.   rts
  6141.   
  6142. BIGOBJPTS:
  6143.  
  6144. .objpointrotlop:
  6145.  
  6146.  cmp.b #3,16(a4)
  6147.  beq.s .itaux
  6148.  
  6149.  move.w (a0),d0
  6150.  sub.w xoff,d0
  6151.  move.w 4(a0),d1
  6152.  addq #8,a0
  6153.  
  6154.  tst.w 12(a4)
  6155.  blt .noworkout
  6156.  
  6157.  sub.w zoff,d1
  6158.  move.w d0,d2
  6159.  muls d6,d2
  6160.  move.w d1,d3
  6161.  muls d5,d3
  6162.  sub.l d3,d2
  6163.  
  6164.  
  6165.  add.l d2,d2
  6166.  swap d2
  6167.  move.w d2,(a1)+
  6168.  
  6169.  muls d5,d0
  6170.  muls d6,d1
  6171.  add.l d0,d1
  6172.  asl.l #2,d1
  6173.  swap d1
  6174.  ext.l d1
  6175.  divs #3,d1
  6176.  moveq #0,d3
  6177.  
  6178.  move.w d1,(a1)+
  6179.  ext.l d2
  6180.  asl.l #7,d2
  6181.  add.l xwobble,d2
  6182.  move.l d2,(a1)+
  6183.  sub.l xwobble,d2
  6184.  
  6185.  add.w #64,a4
  6186.  dbra d7,.objpointrotlop
  6187.  
  6188.  rts
  6189.  
  6190. .itaux:
  6191.  add.w #64,a4
  6192.  bra .objpointrotlop
  6193.  
  6194. .noworkout:
  6195.   move.l #0,(a1)+
  6196.   move.l #0,(a1)+
  6197.   add.w #64,a4
  6198.   dbra d7,.objpointrotlop
  6199.   rts
  6200.  
  6201. LightDraw:
  6202.  
  6203.  move.w (a0)+,d0
  6204.  move.w (a0)+,d1
  6205.  move.l #Rotated,a1
  6206.  move.w 6(a1,d0.w*8),d2
  6207.  ble.s oneendbehind
  6208.  move.w 6(a1,d1.w*8),d3
  6209.  bgt.s bothendsinfront
  6210.  
  6211. oneendbehind:
  6212.  rts
  6213. bothendsinfront:
  6214.  
  6215.  move.l #OnScreen,a2
  6216.  move.w (a2,d0.w*2),d0
  6217.  bge.s okleftend
  6218.  moveq #0,d0
  6219. okleftend:
  6220.  move.w (a2,d1.w*2),d1
  6221.  bgt.s somevis
  6222.  rts
  6223. somevis:
  6224.  cmp.w RIGHTX,d0
  6225.  blt.s somevis2
  6226.  rts
  6227. somevis2:
  6228.  cmp.w RIGHTX,d1
  6229.  blt.s okrightend
  6230.  move.w RIGHTX,d1
  6231.  subq #1,d1
  6232. okrightend:
  6233.  
  6234.  sub.w d0,d1
  6235.  blt.s wrongbloodywayround
  6236.  move.l #brightentab,a4
  6237.  move.l #objintocop,a1
  6238.  lea (a1,d0.w*2),a1
  6239.  
  6240.  move.l frompt,a3
  6241.  move.w #104*4,d6
  6242.  move.w #79,d2
  6243. lacross:
  6244.  move.w d2,d3
  6245.  move.l a3,a2
  6246.  adda.w (a1)+,a2
  6247. ldown:
  6248.  add.w d6,a2
  6249.  move.w (a2),d7
  6250.  move.w (a4,d7.w*2),(a2)
  6251.  dbra d3,ldown
  6252.  dbra d1,lacross
  6253.  
  6254. wrongbloodywayround:
  6255.  
  6256.  rts
  6257.  
  6258. FaceToPlace: dc.w 0
  6259.  
  6260. Cheese:
  6261.  dc.w 4,15
  6262.  
  6263. FacesList:
  6264.  dc.w 0,4*4
  6265.  dc.w 1,2*4
  6266.  dc.w 0,2*4
  6267.  dc.w 2,2*4
  6268.  dc.w 0,2*4
  6269.  dc.w 1,3*4
  6270.  dc.w 0,2*4
  6271.  dc.w 2,3*4
  6272.  dc.w 0,5*4
  6273.  dc.w 1,2*4
  6274.  dc.w 0,2*4
  6275.  dc.w 2,2*4
  6276.  dc.w 0,2*4
  6277.  dc.w 1,2*4
  6278.  dc.w 0,2*4
  6279.  dc.w 2,3*4
  6280.  dc.w 0,1*4
  6281.  dc.w 1,3*4
  6282.  dc.w 0,1*4
  6283.  dc.w 2,3*4
  6284.  dc.w 0,1*4
  6285.  
  6286. EndOfFacesList:
  6287.  
  6288. FacesPtr:
  6289.  dc.l FacesList
  6290. FacesCounter:
  6291.  dc.w 0
  6292. Expression:
  6293.  dc.w 0
  6294.  
  6295.  
  6296. Energy:
  6297.  dc.w 191
  6298. OldEnergy:
  6299.  dc.w 191
  6300. Ammo: dc.w 63
  6301. OldAmmo: dc.w 63
  6302.  
  6303. FullEnergy:
  6304. ; move.w #127,Energy
  6305. ; move.w #127,OldEnergy
  6306. ; move.l #health,a0
  6307. ; move.l #borders,a1
  6308. ; add.l #25*8*2+6,a1
  6309. ; lea 2592(a1),a2
  6310. ; move.w #127,d0
  6311. ;PutInFull:
  6312. ; move.b (a0)+,(a1)
  6313. ; move.b (a0)+,8(a1)
  6314. ; add.w #16,a1
  6315. ; move.b (a0)+,(a2)
  6316. ; move.b (a0)+,8(a2)
  6317. ; add.w #16,a2
  6318. ; dbra d0,PutInFull
  6319.  
  6320.  rts
  6321.  
  6322. ;EnergyBar:
  6323.  
  6324.  move.w Energy,d0
  6325.  bgt.s .noeneg
  6326.  move.w #0,d0
  6327. .noeneg:
  6328.  move.w d0,Energy
  6329.  
  6330.  cmp.w OldEnergy,d0
  6331.  bne.s gottochange
  6332.  
  6333. NoChange
  6334.  rts
  6335.  
  6336. gottochange:
  6337.   
  6338.  blt LessEnergy
  6339.  cmp.w #127,Energy
  6340.  blt.s NotMax
  6341.  move.w #127,Energy
  6342. NotMax:
  6343.  
  6344.  move.w Energy,d0
  6345.  move.w OldEnergy,d2
  6346.  sub.w d0,d2
  6347.  beq.s NoChange    
  6348.  neg.w d2
  6349.  
  6350.  move.w #127,d3
  6351.  sub.w d0,d3
  6352.  
  6353.  move.l #health,a0
  6354.  lea (a0,d3.w*4),a0
  6355. ; move.l #borders+25*16+6,a1
  6356.  lsl.w #4,d3
  6357.  add.w d3,a1
  6358.  lea 2592(a1),a2
  6359.  
  6360. EnergyRise:
  6361.  move.b (a0)+,(a1)
  6362.  move.b (a0)+,8(a1)
  6363.  add.w #16,a1
  6364.  move.b (a0)+,(a2)
  6365.  move.b (a0)+,8(a2)
  6366.  add.w #16,a2
  6367.  subq #1,d2
  6368.  bgt.s EnergyRise
  6369.  
  6370.  move.w Energy,OldEnergy
  6371.  
  6372.  rts 
  6373.  
  6374. LessEnergy: 
  6375.  move.w OldEnergy,d2
  6376.  sub.w d0,d2
  6377.  
  6378.  move.w #127,d3
  6379.  sub.w OldEnergy,d3
  6380.  
  6381. ; move.l #borders+25*16+6,a1
  6382.  asl.w #4,d3
  6383.  add.w d3,a1
  6384.  lea 2592(a1),a2
  6385.  
  6386. EnergyDrain:
  6387.  move.b #0,(a1)
  6388.  move.b #0,8(a1)
  6389.  move.b #0,(a2)
  6390.  move.b #0,8(a2)
  6391.  add.w #16,a1
  6392.  add.w #16,a2
  6393.  subq #1,d2
  6394.  bgt.s EnergyDrain
  6395.  
  6396.  move.w Energy,OldEnergy
  6397.  
  6398.  rts 
  6399.  
  6400. firstdigit: dc.b 0
  6401. secdigit: dc.b 0
  6402. thirddigit: dc.b 0
  6403.  
  6404.  even
  6405.  
  6406. gunny: dc.w 0
  6407.  
  6408. AmmoBar:
  6409.  
  6410. * Do guns first.
  6411.  
  6412.  move.l #borderchars,a4
  6413.  move.b p1_gunselected,d0 
  6414.  move.l #PLAYERONEGUNS,a5
  6415.  cmp.b #'s',mors
  6416.  bne.s .notplr2
  6417.  move.l #PLAYERTWOGUNS,a5
  6418.  move.b p2_gunselected,d0
  6419. .notplr2:
  6420.  
  6421.  move.b d0,gunny
  6422.  
  6423.  move.w #9,d2
  6424.  moveq #0,d0
  6425. putingunnums:
  6426.  move.w #4,d1
  6427.  move.l a4,a0
  6428.  cmp.b gunny,d0
  6429.  bne.s .notsel
  6430.  add.l #5*10*8*2,a0
  6431.  addq #2,a5
  6432.  bra.s .donesel
  6433. .notsel:
  6434.  tst.w (a5)+
  6435.  beq.s .donesel
  6436.  add.l #5*10*8,a0
  6437. .donesel:
  6438.  move.l SCRNDRAWPT,a1
  6439.  add.w d0,a1
  6440.  add.l #3+(240*40),a1
  6441.  bsr DRAWDIGIT
  6442.  addq #1,d0
  6443.  dbra d2,putingunnums
  6444.  
  6445.  move.w Ammo,d0
  6446.  ext.l d0
  6447.  divs #10,d0
  6448.  swap d0
  6449.  move.b d0,thirddigit
  6450.  swap d0
  6451.  ext.l d0
  6452.  divs #10,d0
  6453.  move.b d0,firstdigit
  6454.  swap d0
  6455.  move.b d0,secdigit
  6456.  
  6457.  move.l #borderchars+15*8*10,a0
  6458.  cmp.w #10,Ammo
  6459.  blt.s .notsmallamo
  6460.  add.l #7*8*10,a0
  6461. .notsmallamo:
  6462.  
  6463.  move.l SCRNDRAWPT,a1
  6464.  add.l #20+238*40,a1
  6465.  move.b firstdigit,d0
  6466.  move.w #6,d1
  6467.  bsr DRAWDIGIT
  6468.  
  6469.  move.l SCRNDRAWPT,a1
  6470.  add.l #21+238*40,a1
  6471.  move.b secdigit,d0
  6472.  move.w #6,d1
  6473.  bsr DRAWDIGIT
  6474.  
  6475.  move.l SCRNDRAWPT,a1
  6476.  add.l #22+238*40,a1
  6477.  move.b thirddigit,d0
  6478.  move.w #6,d1
  6479.  bsr DRAWDIGIT
  6480.  
  6481.  rts
  6482.  
  6483. EnergyBar:
  6484.  move.w Energy,d0
  6485.  bge.s .okpo
  6486.  moveq #0,d0 
  6487. .okpo:
  6488.  
  6489.  ext.l d0
  6490.  divs #10,d0
  6491.  swap d0
  6492.  move.b d0,thirddigit
  6493.  swap d0
  6494.  ext.l d0
  6495.  divs #10,d0
  6496.  move.b d0,firstdigit
  6497.  swap d0
  6498.  move.b d0,secdigit
  6499.  
  6500.  move.l #borderchars+15*8*10,a0
  6501.  cmp.w #10,Energy
  6502.  blt.s .notsmallamo
  6503.  add.l #7*8*10,a0
  6504. .notsmallamo:
  6505.  
  6506.  move.l SCRNDRAWPT,a1
  6507.  add.l #34+238*40,a1
  6508.  move.b firstdigit,d0
  6509.  move.w #6,d1
  6510.  bsr DRAWDIGIT
  6511.  
  6512.  move.l SCRNDRAWPT,a1
  6513.  add.l #35+238*40,a1
  6514.  move.b secdigit,d0
  6515.  move.w #6,d1
  6516.  bsr DRAWDIGIT
  6517.  
  6518.  move.l SCRNDRAWPT,a1
  6519.  add.l #36+238*40,a1
  6520.  move.b thirddigit,d0
  6521.  move.w #6,d1
  6522.  bsr DRAWDIGIT
  6523.  
  6524.  move.l SCRNSHOWPT,a1
  6525.  add.l #34+238*40,a1
  6526.  move.b firstdigit,d0
  6527.  move.w #6,d1
  6528.  bsr DRAWDIGIT
  6529.  
  6530.  move.l SCRNSHOWPT,a1
  6531.  add.l #35+238*40,a1
  6532.  move.b secdigit,d0
  6533.  move.w #6,d1
  6534.  bsr DRAWDIGIT
  6535.  
  6536.  move.l SCRNSHOWPT,a1
  6537.  add.l #36+238*40,a1
  6538.  move.b thirddigit,d0
  6539.  move.w #6,d1
  6540.  bsr DRAWDIGIT
  6541.  
  6542.  
  6543.  rts
  6544.  
  6545.  
  6546. DRAWDIGIT:
  6547.  ext.w d0
  6548.  lea (a0,d0.w),a2
  6549. charlines:
  6550.  lea 30720(a1),a3 
  6551.  move.b (a2),(a1)
  6552.  move.b 10(a2),10240(a1)
  6553.  move.b 20(a2),20480(a1)
  6554.  move.b 30(a2),(a3)
  6555.  move.b 40(a2),10240(a3)
  6556.  move.b 50(a2),20480(a3)
  6557.  lea 30720(a3),a3
  6558.  move.b 60(a2),(a3)
  6559.  move.b 70(a2),10240(a3)
  6560.  
  6561.  add.w #10*8,a2
  6562.  add.w #40,a1
  6563.  dbra d1,charlines
  6564.  
  6565.  rts
  6566.  
  6567. borderchars: incbin "ab3:includes/bordercharsRAW"
  6568.  
  6569. NARRATOR:
  6570.  
  6571. ; sub.w #1,NARRTIME
  6572. ; bge .NOCHARYET
  6573. ; move.w #3,NARRTIME
  6574.  
  6575.  move.l #SCROLLSCRN,d1
  6576.  move.w d1,scroll
  6577.  swap d1
  6578.  move.w d1,scrolh
  6579.  
  6580.  move.w SCROLLTIMER,d0
  6581.  subq #1,d0
  6582.  move.w d0,SCROLLTIMER
  6583.  cmp.w #40,d0
  6584.  bge .NOCHARYET
  6585.  tst.w d0
  6586.  bge.s .okcha
  6587.  
  6588.  move.w #150,SCROLLTIMER
  6589.  bra .NOCHARYET
  6590.  
  6591. .okcha:
  6592.  
  6593.  move.l #SCROLLSCRN,a0
  6594.  add.w SCROLLXPOS,a0
  6595.  
  6596.  moveq #1,d7
  6597. .doachar: 
  6598.  
  6599.  move.l SCROLLPOINTER,a1
  6600.  moveq #0,d1
  6601.  move.b (a1)+,d1    ; character
  6602.  move.l a1,d2
  6603.  cmp.l ENDSCROLL,d2
  6604.  blt.s .notrestartscroll
  6605.  move.l #BLANKSCROLL,a1
  6606.  move.l #BLANKSCROLL+80,ENDSCROLL
  6607. .notrestartscroll
  6608.  move.l a1,SCROLLPOINTER
  6609.  
  6610.  move.l #SCROLLCHARS,a1
  6611.  asl.w #3,d1
  6612.  add.w d1,a1
  6613.  
  6614.  move.b (a1)+,(a0)
  6615.  move.b (a1)+,80(a0)
  6616.  move.b (a1)+,80*2(a0)
  6617.  move.b (a1)+,80*3(a0)
  6618.  move.b (a1)+,80*4(a0)
  6619.  move.b (a1)+,80*5(a0)
  6620.  move.b (a1)+,80*6(a0)
  6621.  move.b (a1)+,80*7(a0)
  6622.  
  6623.  addq #1,a0
  6624.  dbra d7,.doachar
  6625.  
  6626.  move.w SCROLLXPOS,d0
  6627.  addq #2,d0
  6628.  move.w d0,SCROLLXPOS
  6629.  cmp.w #80,d0
  6630.  blt .NOCHARYET
  6631.  move.w #0,SCROLLXPOS
  6632.  
  6633. .NOCHARYET:
  6634.  rts
  6635.  
  6636. ; cmp.w OldAmmo,d0
  6637. ; bne.s .gottochange
  6638.  
  6639. NARRTIME: dc.w 5
  6640.  
  6641. SCROLLCHARS: incbin "ab3:includes/scrollfont"
  6642.  
  6643. .NoChange
  6644.  rts
  6645.  
  6646. .gottochange:
  6647.   
  6648.  blt LessAmmo
  6649.  cmp.w #63,Ammo
  6650.  blt.s .NotMax
  6651.  move.w #63,Ammo
  6652. .NotMax:
  6653.  
  6654.  move.w Ammo,d0
  6655.  move.w OldAmmo,d2
  6656.  sub.w d0,d2
  6657.  beq.s .NoChange
  6658.  neg.w d2
  6659.  
  6660.  move.w #63,d3
  6661.  sub.w d0,d3
  6662.  
  6663.  move.l #Ammunition,a0
  6664.  lea (a0,d3.w*8),a0
  6665. ; move.l #borders+5184+25*16+1,a1
  6666.  lsl.w #5,d3
  6667.  add.w d3,a1
  6668.  lea 2592(a1),a2
  6669.  
  6670. AmmoRise:
  6671.  move.b (a0)+,(a1)
  6672.  move.b (a0)+,8(a1)
  6673.  add.w #16,a1
  6674.  move.b (a0)+,(a2)
  6675.  move.b (a0)+,8(a2)
  6676.  add.w #16,a2
  6677.  move.b (a0)+,(a1)
  6678.  move.b (a0)+,8(a1)
  6679.  add.w #16,a1
  6680.  move.b (a0)+,(a2)
  6681.  move.b (a0)+,8(a2)
  6682.  add.w #16,a2
  6683.  subq #1,d2
  6684.  bgt.s AmmoRise
  6685.  
  6686.  move.w Ammo,OldAmmo
  6687.  
  6688.  rts 
  6689.  
  6690.  
  6691. LessAmmo: 
  6692.  move.w OldAmmo,d2
  6693.  sub.w d0,d2
  6694.  
  6695.  move.w #63,d3
  6696.  sub.w OldAmmo,d3
  6697.  
  6698. ; move.l #borders++5184+25*16+1,a1
  6699.  asl.w #5,d3
  6700.  add.w d3,a1
  6701.  lea 2592(a1),a2
  6702.  
  6703. AmmoDrain:
  6704.  move.b #0,(a1)
  6705.  move.b #0,8(a1)
  6706.  move.b #0,(a2)
  6707.  move.b #0,8(a2)
  6708.  add.w #16,a1
  6709.  add.w #16,a2
  6710.  move.b #0,(a1)
  6711.  move.b #0,8(a1)
  6712.  move.b #0,(a2)
  6713.  move.b #0,8(a2)
  6714.  add.w #16,a1
  6715.  add.w #16,a2
  6716.  subq #1,d2
  6717.  bgt.s AmmoDrain
  6718.  
  6719.  move.w Ammo,OldAmmo
  6720.  
  6721.  rts 
  6722.  
  6723. nulop:
  6724.  move.w #$0010,$dff000+intreq
  6725.  rte
  6726.  
  6727. doanything: dc.w 0
  6728.  
  6729. end:
  6730. ;     _break #0
  6731.  
  6732.  
  6733.  move.l #$dff000,a6
  6734.  move.w #$f,$dff000+dmacon
  6735. waitfortop22:
  6736.  btst.b #0,intreqrl(a6)
  6737.  beq waitfortop22
  6738. waitfortop222:
  6739.  btst.b #0,intreqrl(a6)
  6740.  beq waitfortop222
  6741.  
  6742.  clr.b dosounds
  6743.  clr.b doanything
  6744.  
  6745.  move.w PLAYERONEHEALTH,Energy
  6746.  cmp.b #'s',mors
  6747.  bne.s .notsl
  6748.  move.w PLAYERTWOHEALTH,Energy
  6749. .notsl:
  6750.  
  6751.  move.l drawpt,d0
  6752.  move.l olddrawpt,drawpt
  6753.  move.l d0,olddrawpt
  6754.  
  6755. ; cmp.b #'b',Prefsfile+3
  6756. ; bne.s .noback
  6757. ; jsr mt_end
  6758. ;.noback
  6759.  
  6760.  tst.w Energy
  6761.  bgt.s wevewon
  6762.  move.w #0,Energy
  6763.  bsr EnergyBar
  6764.  
  6765.  move.l #gameover,mt_data
  6766.  st UseAllChannels
  6767.  clr.b reachedend
  6768.  jsr mt_init
  6769. playgameover:
  6770.  move.l #$dff000,a6
  6771. waitfortop2:
  6772.  
  6773.     
  6774.  btst.b #0,intreqrl(a6)
  6775.  beq waitfortop2
  6776.  move.w #$1,intreq(a6)
  6777.  
  6778.     
  6779.  jsr mt_music
  6780.  
  6781.  
  6782.     
  6783.  tst.b reachedend
  6784.  beq.s playgameover
  6785.  
  6786.  bra wevelost
  6787.  
  6788.  
  6789. wevewon:
  6790.  
  6791.  
  6792.  bsr EnergyBar
  6793.  
  6794.  cmp.b #'n',mors
  6795.  bne.s .nonextlev
  6796.  add.w #1,MAXLEVEL
  6797.  st FINISHEDLEVEL
  6798. .nonextlev:
  6799.  
  6800.  move.l #welldone,mt_data
  6801.  st UseAllChannels
  6802.  clr.b reachedend
  6803.  
  6804.  jsr mt_init
  6805. playwelldone:
  6806.  move.l #$dff000,a6
  6807. waitfortop3:
  6808.  btst.b #0,intreqrl(a6)
  6809.  beq waitfortop3
  6810.  move.w #$1,intreq(a6)
  6811.  
  6812.  jsr mt_music
  6813.  
  6814.  tst.b reachedend
  6815.  beq.s playwelldone
  6816.  
  6817. wevelost:
  6818.  
  6819.  PROTICHECK a0
  6820.  
  6821.  jmp closeeverything 
  6822.  
  6823. endnomusic
  6824.  clr.b doanything
  6825.  
  6826. ; cmp.b #'b',Prefsfile+3
  6827. ; bne.s .noback
  6828. ; jsr mt_end
  6829. ;.noback
  6830. *******************************
  6831. ; cmp.b #'n',mors
  6832. ; bne.s .nonextlev
  6833. ; cmp.w #15,MAXLEVEL
  6834. ; bge.s .nonextlev
  6835. ; add.w #1,MAXLEVEL
  6836. ; st FINISHEDLEVEL
  6837. ;.nonextlev:
  6838. ******************************
  6839.  
  6840.  jmp closeeverything
  6841.  
  6842. do32:
  6843.  move.w #31,d7
  6844.  move.w #$180,d1
  6845. across:
  6846.  move.w d1,(a1)+
  6847.  move.w d1,(a3)+
  6848.  move.w #0,(a1)+ 
  6849.  move.w #0,(a3)+
  6850.  add.w #2,d1
  6851.  dbra d7,across
  6852.  rts
  6853.  
  6854. string:
  6855.     dc.b    'credits',0
  6856.  
  6857. ENDGAMESCROLL:
  6858.  
  6859.     move.l    4.w,a6
  6860.     move.l    #string,d1
  6861.     moveq    #0,d2
  6862.     moveq    #0,d3
  6863.     jsr    _LVOExecute(a6)
  6864.  
  6865. ; include "endscroll.s"
  6866.  
  6867. ***********************************
  6868.  include "ab3:source_4000/CD32JOY"
  6869.  
  6870.  
  6871.  
  6872. *************************************
  6873. * Set left and right clip values
  6874. *************************************
  6875.  
  6876.  
  6877.  
  6878. NEWsetlclip:
  6879.  move.l #OnScreen,a1
  6880.  move.l #Rotated,a2
  6881.  move.l CONNECT_TABLE,a3
  6882.  move.l Points,a4
  6883.  
  6884.  move.w (a0),d0
  6885.  bge.s .notignoreleft
  6886.  
  6887. ; move.l #0,(a6)
  6888.  
  6889.  bra .leftnotoktoclip
  6890. .notignoreleft:
  6891.  
  6892.  move.w 6(a2,d0*8),d3    ; left z val
  6893.  bgt.s .leftclipinfront
  6894.  addq #2,a0
  6895.  rts
  6896.  
  6897.  tst.w 6(a2,d0*8)
  6898.  bgt.s .leftnotoktoclip
  6899. .ignoreboth:
  6900. ; move.l #0,(a6)
  6901. ; move.l #96*65536,4(a6)
  6902.  move.w #0,leftclip
  6903.  move.w RIGHTX,rightclip
  6904.  addq #8,a6
  6905.  addq #2,a0
  6906.  rts
  6907.  
  6908. .leftclipinfront:
  6909.  move.w (a1,d0*2),d1    ; left x on screen
  6910.  move.w (a0),d2
  6911.  move.w 2(a3,d2.w*4),d2
  6912.  move.w (a1,d2.w*2),d2
  6913.  cmp.w d1,d2
  6914.  bgt.s .leftnotoktoclip
  6915.  
  6916.  
  6917. *************************************
  6918.  
  6919.  move.w 2(a3,d0.w*4),d6
  6920.  
  6921.  move.w (a4,d0.w*4),d2
  6922.  move.w 2(a4,d0.w*4),d3
  6923.  move.w (a4,d6.w*4),d4
  6924.  move.w 2(a4,d6.w*4),d5
  6925.  
  6926.  sub.w d2,d4    ;dx
  6927.  sub.w d3,d5    ;dz
  6928.  move.w xoff,d0
  6929.  move.w zoff,d6
  6930.  
  6931.  sub.w d2,d0
  6932.  sub.w d3,d6
  6933.  
  6934.  muls d0,d4
  6935.  muls d6,d5
  6936.  add.l d4,d5
  6937.  bge.s .leftnotoktoclip
  6938.  
  6939. *************************************
  6940.  
  6941.  
  6942.  
  6943. ; move.w d1,(a6)
  6944. ; move.w d3,2(a6)
  6945.  cmp.w leftclip,d1
  6946.  ble.s .leftnotoktoclip
  6947.  move.w d1,leftclip
  6948. .leftnotoktoclip:
  6949.  
  6950.  addq #2,a0
  6951.  
  6952.  rts
  6953.  
  6954. NEWsetrclip
  6955.  move.l #OnScreen,a1
  6956.  move.l #Rotated,a2
  6957.  move.l CONNECT_TABLE,a3
  6958.  move.w (a0),d0
  6959.  bge.s .notignoreright
  6960. ; move.w #96,4(a6)
  6961. ; move.w #0,6(a6)
  6962.  move.w #0,d4
  6963.  bra .rightnotoktoclip
  6964. .notignoreright:
  6965.  move.w 6(a2,d0*8),d4    ; right z val
  6966.  bgt.s .rightclipinfront
  6967. ; move.w #96,4(a6)
  6968. ; move.w #0,6(a6)
  6969.  bra.s .rightnotoktoclip
  6970.  
  6971. .rightclipinfront:
  6972.  move.w (a1,d0*2),d1    ; right x on screen
  6973.  move.w (a0),d2
  6974.  move.w (a3,d2.w*4),d2
  6975.  move.w (a1,d2.w*2),d2
  6976.  cmp.w d1,d2
  6977.  blt.s .rightnotoktoclip
  6978. ; move.w d1,4(a6)
  6979. ; move.w d4,6(a6)
  6980.  
  6981.  
  6982. *************************************
  6983.  
  6984.  move.w (a3,d0.w*4),d6
  6985.  
  6986.  move.w (a4,d0.w*4),d2
  6987.  move.w 2(a4,d0.w*4),d3
  6988.  move.w (a4,d6.w*4),d4
  6989.  move.w 2(a4,d6.w*4),d5
  6990.  
  6991.  sub.w d2,d4    ;dx
  6992.  sub.w d3,d5    ;dz
  6993.  move.w xoff,d0
  6994.  move.w zoff,d6
  6995.  
  6996.  sub.w d2,d0
  6997.  sub.w d3,d6
  6998.  
  6999.  muls d0,d4
  7000.  muls d6,d5
  7001.  add.l d4,d5
  7002.  ble.s .rightnotoktoclip
  7003.  
  7004. *************************************
  7005.  
  7006.  
  7007.  
  7008.  cmp.w rightclip,d1
  7009.  bge.s .rightnotoktoclip
  7010.  addq #1,d1
  7011.  move.w d1,rightclip
  7012. .rightnotoktoclip:
  7013.  addq #8,a6
  7014.  addq #2,a0
  7015.  rts
  7016.  
  7017. FIRSTsetlrclip:
  7018.  move.l #OnScreen,a1
  7019.  move.l #Rotated,a2
  7020.  
  7021.  move.w (a0)+,d0
  7022.  bge.s .notignoreleft
  7023.  bra .leftnotoktoclip
  7024. .notignoreleft:
  7025.  
  7026.  move.w 6(a2,d0*8),d3    ; left z val
  7027.  bgt.s .leftclipinfront
  7028.  
  7029.  move.w (a0),d0
  7030.  blt.s .ignoreboth
  7031.  tst.w 6(a2,d0*8)
  7032.  bgt.s .leftnotoktoclip
  7033. .ignoreboth
  7034.  move.w RIGHTX,rightclip
  7035.  move.w #0,leftclip
  7036.  addq #2,a0
  7037.  rts
  7038.  
  7039. .leftclipinfront:
  7040.  move.w (a1,d0*2),d1    ; left x on screen
  7041.  cmp.w leftclip,d1
  7042.  ble.s .leftnotoktoclip
  7043.  move.w d1,leftclip
  7044. .leftnotoktoclip:
  7045.  
  7046.  move.w (a0)+,d0
  7047.  bge.s .notignoreright
  7048.  move.w #0,d4
  7049.  bra .rightnotoktoclip
  7050. .notignoreright:
  7051.  move.w 6(a2,d0*8),d4    ; right z val
  7052.  ble.s .rightnotoktoclip
  7053.  
  7054. .rightclipinfront:
  7055.  move.w (a1,d0*2),d1    ; right x on screen
  7056.  addq #1,d1
  7057.  cmp.w rightclip,d1
  7058.  bge.s .rightnotoktoclip
  7059.  move.w d1,rightclip
  7060. .rightnotoktoclip:
  7061.  
  7062. ; move.w leftclip,d0
  7063. ; move.w rightclip,d1
  7064. ; cmp.w d0,d1
  7065. ; bge.s .noswap
  7066. ; move.w #192,rightclip
  7067. ; move.w #0,leftclip
  7068. ;.noswap:
  7069.  
  7070.  rts
  7071.  
  7072.  
  7073. leftclip2: dc.w 0
  7074. rightclip2: dc.w 0
  7075. ZoneBright: dc.w 0
  7076.  
  7077. npolys: dc.w 0
  7078.  
  7079. PLR1_fire: dc.b 0
  7080. PLR2_fire: dc.b 0
  7081.  
  7082. *****************************************************
  7083.  
  7084.  
  7085. pastdata:
  7086. ***********************************
  7087. * This routine animates brightnesses.
  7088.  
  7089.  
  7090. liftpt: dc.l liftanimtab
  7091.  
  7092. brightpt:
  7093.  dc.l brightanimtab
  7094.  
  7095.  
  7096. liftanim:
  7097.  rts
  7098.  
  7099. ******************************
  7100.  include "ab3:source_4000/ObjectMove"
  7101.  include "ab3:source_4000/newAnims"
  7102.  include "ab3:source_4000/airoutine.s"
  7103. ******************************
  7104. startpass:
  7105. ; include "ab3:source_4000/password_reloc.s"
  7106. endpass:
  7107.  
  7108. rotanimpt: dc.w 0
  7109. xradd: dc.w 5
  7110. yradd: dc.w 8
  7111. xrpos: dc.w 320
  7112. yrpos: dc.w 320
  7113.  
  7114. rotanim:
  7115.  rts
  7116.  
  7117. option:
  7118.  dc.l 0,0
  7119.  
  7120. ********** WALL STUFF *******************************
  7121.  
  7122.  include "AB3:source_4000/hireswall.s"
  7123.  include "AB3:source_4000/hiresgourwall.s"
  7124.  
  7125. *****************************************************
  7126.  
  7127. ******************************************
  7128. * floor polygon
  7129.  
  7130. numsidestd: dc.w 0
  7131. bottomline: dc.w 0
  7132.  
  7133. checkforwater:
  7134.  tst.b usewater
  7135.  beq.s .notwater
  7136.  
  7137.  move.l Roompt,a1
  7138.  move.w (a1),d7
  7139.  cmp.w currzone,d7
  7140.  bne.s .notwater
  7141.  
  7142.  move.b #$f,fillscrnwater
  7143.  
  7144. .notwater:
  7145.  move.w (a0)+,d6    ; sides-1
  7146.  add.w d6,d6
  7147.  add.w d6,a0
  7148.  add.w #4+6,a0
  7149.  rts
  7150.  
  7151.  rts
  7152.  
  7153. ;NewCornerBuff:
  7154. ; ds.l 100
  7155. CLRNOFLOOR: dc.w 0
  7156.  
  7157. itsafloordraw:
  7158.  
  7159. * If D0 =1 then its a floor otherwise (=2) it's
  7160. * a roof.
  7161.  
  7162.  move.w #0,above
  7163.  move.w (a0)+,d6    ; ypos of poly
  7164.  
  7165.  tst.b usewater
  7166.  beq.s .oknon
  7167.  tst.b DOANYWATER
  7168.  beq dontdrawreturn
  7169. .oknon
  7170.  
  7171.  move.w d6,d7
  7172.  ext.l d7
  7173.  asl.l #6,d7
  7174.  cmp.l TOPOFROOM,d7
  7175.  blt checkforwater
  7176.  cmp.l BOTOFROOM,d7
  7177.  bgt.s dontdrawreturn
  7178.  
  7179.  move.w leftclip,d7
  7180.  cmp.w rightclip,d7
  7181.  bge.s dontdrawreturn
  7182.  
  7183.  sub.w flooryoff,d6
  7184.  bgt.s below
  7185.  blt.s aboveplayer
  7186.  
  7187.  tst.b usewater
  7188.  beq.s .notwater
  7189.  
  7190.  move.l Roompt,a1
  7191.  move.w (a1),d7
  7192.  cmp.w currzone,d7
  7193.  
  7194.  bne.s .notwater
  7195.  
  7196.  st fillscrnwater
  7197.  
  7198. .notwater:
  7199.  
  7200.  
  7201. dontdrawreturn:
  7202.  move.w (a0)+,d6    ; sides-1
  7203.  add.w d6,d6
  7204.  add.w d6,a0
  7205.  add.w #4+6,a0
  7206.  rts
  7207. aboveplayer:
  7208.  
  7209.  tst.b usewater
  7210.  beq.s .notwater
  7211.  
  7212.  move.l Roompt,a1
  7213.  move.w (a1),d7
  7214.  cmp.w currzone,d7
  7215.  bne.s .notwater
  7216.  
  7217.  move.b #$f,fillscrnwater
  7218.  
  7219. .notwater:
  7220.  
  7221.  btst #1,d0
  7222.  beq.s dontdrawreturn
  7223.  move.w MIDDLEY,d7
  7224.  sub.w topclip,d7 
  7225.  ble.s dontdrawreturn
  7226.  move.w #1,d0
  7227.  move.w d0,above
  7228.  neg.w d6
  7229.  bra.s notbelow
  7230. below:
  7231.  move.w botclip,d7
  7232.  sub.w MIDDLEY,d7
  7233.  ble.s dontdrawreturn
  7234. notbelow:
  7235.  btst #0,d0
  7236.  beq.s dontdrawreturn
  7237.  move.w d6,distaddr
  7238.  muls #64,d6
  7239.  move.l d6,ypos
  7240.  ext.l d7
  7241.  divs.l d7,d6        ; zpos of bottom
  7242.             ; visible line
  7243.  
  7244.  beq dontdrawreturn
  7245.  
  7246.  cmp.l #32767,d6
  7247.  bgt dontdrawreturn
  7248.             
  7249.  move.w d6,minz
  7250.  move.w d7,bottomline
  7251.  
  7252. ; Go round each point finding out
  7253. ; if it should be visible or not.
  7254.  
  7255.  move.l a0,-(a7)
  7256.  
  7257.  move.w (a0)+,d7    ; number of sides
  7258.  move.l #Rotated,a1
  7259.  move.l #OnScreen,a2
  7260. ; move.l #NewCornerBuff,a3
  7261.  moveq #0,d4
  7262.  moveq #0,d5
  7263.  moveq #0,d6
  7264.  clr.b anyclipping
  7265.  
  7266. cornerprocessloop:
  7267.  
  7268.  move.w (a0)+,d0
  7269.  and.w #$fff,d0
  7270.  move.w 6(a1,d0.w*8),d1
  7271.  ble  .canttell
  7272.  
  7273.  move.w (a2,d0.w*2),d3
  7274.  cmp.w leftclip,d3
  7275.  bgt.s .nol
  7276.  st d4
  7277.  st anyclipping
  7278.  bra.s .nos
  7279. .nol:
  7280.  cmp.w rightclip,d3
  7281.  blt.s .nor
  7282.  st d6
  7283.  st anyclipping
  7284.  bra.s .nos
  7285. .nor:
  7286.  st d5
  7287. .nos:
  7288.  bra .cantell
  7289.  
  7290. .canttell:
  7291.  st d5
  7292.  st anyclipping
  7293.  
  7294. .cantell:
  7295.  
  7296.  
  7297.  dbra d7,cornerprocessloop
  7298.  
  7299.  
  7300.  move.l (a7)+,a0
  7301.  tst.b d5
  7302.  bne.s somefloortodraw
  7303.  eor.b d4,d6
  7304.  bne dontdrawreturn
  7305.  
  7306. somefloortodraw:
  7307.  
  7308.  tst.b gourfloor
  7309.  bne goursides
  7310.  
  7311.  move.w #300,top
  7312.  move.w #-1,bottom
  7313.  move.w #0,drawit
  7314.  move.l #Rotated,a1
  7315.  move.l #OnScreen,a2
  7316.  move.w (a0)+,d7    ; no of sides
  7317. sideloop:
  7318.  move.w minz,d6
  7319.  move.w (a0)+,d1
  7320.  move.w (a0),d3
  7321.  and.w #$fff,d1
  7322.  and.w #$fff,d3
  7323.  
  7324.  move.w 6(a1,d1*8),d4    ;first z
  7325.  cmp.w d6,d4
  7326.  bgt firstinfront
  7327.  move.w 6(a1,d3*8),d5    ; sec z
  7328.  cmp.w d6,d5
  7329.  ble bothbehind
  7330. ** line must be on left and partially behind.
  7331.  sub.w d5,d4
  7332.  move.l (a1,d1*8),d0
  7333.  sub.l (a1,d3*8),d0
  7334.  asr.l #7,d0
  7335.  sub.w d5,d6
  7336.  muls d6,d0    ; new x coord
  7337.  divs d4,d0
  7338.  ext.l d0
  7339.  asl.l #7,d0
  7340.  
  7341.  add.l (a1,d3*8),d0
  7342.  move.w minz,d4
  7343.  move.w (a2,d3*2),d2
  7344.  divs d4,d0
  7345.  add.w MIDDLEX,d0
  7346.  move.l ypos,d3
  7347.  divs d5,d3
  7348.  move.w bottomline,d1 
  7349.  bra lineclipped
  7350.  
  7351. firstinfront:
  7352.  move.w 6(a1,d3*8),d5    ; sec z
  7353.  cmp.w d6,d5
  7354.  bgt bothinfront
  7355. ** line must be on right and partially behind.
  7356.  sub.w d4,d5    ; dz
  7357.  move.l (a1,d3*8),d2
  7358.  sub.l (a1,d1*8),d2    ; dx
  7359.  sub.w d4,d6
  7360.  asr.l #7,d2
  7361.  muls d6,d2    ; new x coord
  7362.  divs d5,d2
  7363.  ext.l d2
  7364.  asl.l #7,d2
  7365.  add.l (a1,d1*8),d2
  7366.  move.w minz,d5
  7367.  move.w (a2,d1*2),d0
  7368.  divs d5,d2
  7369.  add.w MIDDLEX,d2
  7370.  move.l ypos,d1
  7371.  divs d4,d1
  7372.  move.w bottomline,d3 
  7373.  bra lineclipped
  7374.  
  7375. bothinfront:
  7376.  
  7377. * Also, usefully enough, both are on-screen
  7378. * so no bottom clipping is needed.
  7379.  
  7380.  move.w (a2,d1*2),d0    ; first x
  7381.  move.w (a2,d3*2),d2    ; second x
  7382.  move.l ypos,d1
  7383.  move.l d1,d3
  7384.  divs d4,d1        ; first y
  7385.  divs d5,d3        ; second y
  7386. lineclipped:
  7387.  move.l #rightsidetab,a3
  7388.  cmp.w d1,d3
  7389.  beq lineflat
  7390.  st drawit
  7391.  bgt lineonright
  7392.  move.l #leftsidetab,a3
  7393.  exg d1,d3
  7394.  exg d0,d2
  7395.  
  7396.  lea (a3,d1*2),a3
  7397.  
  7398.  cmp.w top(pc),d1
  7399.  bge.s .nonewtop
  7400.  move.w d1,top
  7401. .nonewtop:
  7402.  cmp.w bottom(pc),d3
  7403.  ble.s .nonewbot
  7404.  move.w d3,bottom
  7405. .nonewbot:
  7406.  
  7407.  sub.w d1,d3    ; dy
  7408.  sub.w d0,d2    ; dx
  7409.  
  7410.  blt .linegoingleft
  7411.  
  7412.  ext.l d2
  7413.  divs d3,d2
  7414.  move.w d2,d6
  7415.  swap d2
  7416.  
  7417. ; moveq #0,d6
  7418. ; sub.w d3,d2
  7419. ; blt.s .noco
  7420. ;.makeco
  7421. ; addq #1,d6
  7422. ; sub.w d3,d2
  7423. ; bge.s .makeco
  7424. ;.noco
  7425. ; add.w d3,d2
  7426.  
  7427.  move.w d3,d4
  7428.  move.w d3,d5
  7429.  subq #1,d5
  7430.  move.w d6,d1
  7431.  addq #1,d1
  7432.  
  7433. .pixlopright:
  7434.  move.w d0,(a3)+
  7435.  sub.w d2,d4
  7436.  bge.s .nobigstep
  7437.  add.w d1,d0
  7438.  add.w d3,d4
  7439.  dbra d5,.pixlopright
  7440.  bra lineflat
  7441. .nobigstep
  7442.  add.w d6,d0
  7443.  dbra d5,.pixlopright
  7444.  bra lineflat
  7445.  
  7446. .linegoingleft:
  7447.  
  7448.  neg.w d2
  7449.  
  7450.  ext.l d2
  7451.  divs d3,d2
  7452.  move.w d2,d6
  7453.  swap d2
  7454.  
  7455.  
  7456. ; moveq #0,d6
  7457. ; sub.w d3,d2
  7458. ; blt.s .nocol
  7459. ;.makecol
  7460. ; addq #1,d6
  7461. ; sub.w d3,d2
  7462. ; bge.s .makecol
  7463. ;.nocol
  7464. ; add.w d3,d2
  7465.  
  7466.  
  7467.  
  7468.  move.w d3,d4
  7469.  move.w d3,d5
  7470.  subq #1,d5
  7471.  
  7472.  move.w d6,d1
  7473.  addq #1,d1
  7474.  
  7475. .pixlopleft:
  7476.  sub.w d2,d4
  7477.  bge.s .nobigstepl
  7478.  sub.w d1,d0
  7479.  add.w d3,d4
  7480.  move.w d0,(a3)+
  7481.  dbra d5,.pixlopleft
  7482.  bra lineflat
  7483.  
  7484. .nobigstepl
  7485.  sub.w d6,d0
  7486.  move.w d0,(a3)+
  7487.  dbra d5,.pixlopleft
  7488.  bra lineflat
  7489.  
  7490. lineonright:
  7491.  
  7492.  lea (a3,d1*2),a3
  7493.  
  7494.  cmp.w top(pc),d1
  7495.  bge.s .nonewtop
  7496.  move.w d1,top
  7497. .nonewtop:
  7498.  cmp.w bottom(pc),d3
  7499.  ble.s .nonewbot
  7500.  move.w d3,bottom
  7501. .nonewbot:
  7502.  
  7503.  sub.w d1,d3    ; dy
  7504.  sub.w d0,d2    ; dx
  7505.  blt .linegoingleft
  7506. ; addq #1,d0
  7507.  ext.l d2
  7508.  divs d3,d2
  7509.  move.w d2,d6
  7510.  swap d2
  7511.  
  7512. ; moveq #0,d6
  7513. ; sub.w d3,d2
  7514. ; blt.s .noco
  7515. ;.makeco
  7516. ; addq #1,d6
  7517. ; sub.w d3,d2
  7518. ; bge.s .makeco
  7519. ;.noco
  7520. ; add.w d3,d2
  7521.  
  7522.  move.w d3,d4
  7523.  move.w d3,d5
  7524.  subq #1,d5
  7525.  move.w d6,d1
  7526.  addq #1,d1
  7527.  
  7528. .pixlopright:
  7529.  sub.w d2,d4
  7530.  bge.s .nobigstep
  7531.  add.w d1,d0
  7532.  add.w d3,d4
  7533.  move.w d0,(a3)+
  7534.  dbra d5,.pixlopright
  7535.  bra lineflat
  7536.  
  7537. .nobigstep
  7538.  add.w d6,d0
  7539.  move.w d0,(a3)+
  7540.  dbra d5,.pixlopright
  7541.  bra lineflat
  7542.  
  7543. .linegoingleft:
  7544. ; addq #1,d0
  7545.  neg.w d2
  7546.  
  7547.  ext.l d2
  7548.  divs d3,d2
  7549.  move.w d2,d6
  7550.  swap d2
  7551.  
  7552.  
  7553. ; moveq #0,d6
  7554. ; sub.w d3,d2
  7555. ; blt.s .nocol
  7556. ;.makecol
  7557. ; addq #1,d6
  7558. ; sub.w d3,d2
  7559. ; bge.s .makecol
  7560. ;.nocol
  7561. ; add.w d3,d2
  7562.  
  7563.  move.w d3,d4
  7564.  move.w d3,d5
  7565.  subq #1,d5
  7566.  move.w d6,d1
  7567.  addq #1,d1
  7568.  
  7569. .pixlopleft:
  7570.  move.w d0,(a3)+
  7571.  sub.w d2,d4
  7572.  bge.s .nobigstepl
  7573.  sub.w d1,d0
  7574.  add.w d3,d4
  7575.  dbra d5,.pixlopleft
  7576.  bra lineflat
  7577.  
  7578. .nobigstepl
  7579.  sub.w d6,d0
  7580.  dbra d5,.pixlopleft
  7581.  
  7582. lineflat:
  7583.  
  7584. bothbehind:
  7585.  dbra d7,sideloop
  7586.  bra pastsides
  7587.  
  7588. fbr: dc.w 0
  7589. sbr: dc.w 0
  7590. FloorPtBrights: dc.l 0
  7591.  
  7592. goursides:
  7593.  
  7594.  move.w #300,top
  7595.  move.w #-1,bottom
  7596.  move.w #0,drawit
  7597.  move.l #Rotated,a1
  7598.  move.l #OnScreen,a2
  7599.  move.w (a0)+,d7    ; no of sides
  7600. sideloopGOUR:
  7601.  move.w minz,d6
  7602.  move.w (a0)+,d1
  7603.  move.w (a0),d3
  7604.  
  7605.  move.w d1,d4
  7606.  move.w d3,d5
  7607.  and.w #$0fff,d1
  7608.  and.w #$0fff,d3
  7609.  
  7610.  rol.w #4,d4
  7611.  rol.w #4,d5
  7612.  and.w #$f,d4
  7613.  and.w #$f,d5
  7614.  
  7615.  move.l FloorPtBrights,a4
  7616.  move.w (a4,d4.w*8),d4
  7617.  bge.s .okpos1
  7618.  neg.w d4
  7619. .okpos1:
  7620.  sub.w #300,d4
  7621.  move.w d4,fbr
  7622.  move.w (a4,d5.w*8),d4
  7623.  bge.s .okpos2
  7624.  neg.w d4
  7625. .okpos2:
  7626.  sub.w #300,d4
  7627.  move.w d4,sbr
  7628.  
  7629.  move.w 6(a1,d1*8),d4    ;first z
  7630.  cmp.w d6,d4
  7631.  bgt firstinfrontGOUR
  7632.  move.w 6(a1,d3*8),d5    ; sec z
  7633.  cmp.w d6,d5
  7634.  ble bothbehindGOUR
  7635. ** line must be on left and partially behind.
  7636.  sub.w d5,d4
  7637.  
  7638.  move.w fbr,d0
  7639.  sub.w sbr,d0
  7640.  sub.w d5,d6
  7641.  muls d6,d0
  7642.  divs d4,d0
  7643.  add.w sbr,d0
  7644.  move.w d0,fbr
  7645.  
  7646.  move.l (a1,d1*8),d0
  7647.  sub.l (a1,d3*8),d0
  7648.  asr.l #7,d0
  7649.  muls d6,d0    ; new x coord
  7650.  divs d4,d0
  7651.  ext.l d0
  7652.  asl.l #7,d0
  7653.  
  7654.  add.l (a1,d3*8),d0
  7655.  move.w minz,d4
  7656.  move.w (a2,d3*2),d2
  7657.  divs d4,d0
  7658.  add.w MIDDLEX,d0
  7659.  move.l ypos,d3
  7660.  divs d5,d3
  7661.  
  7662.  move.w bottomline,d1 
  7663.  bra lineclippedGOUR
  7664.  
  7665. firstinfrontGOUR:
  7666.  move.w 6(a1,d3*8),d5    ; sec z
  7667.  cmp.w d6,d5
  7668.  bgt bothinfrontGOUR
  7669. ** line must be on right and partially behind.
  7670.  sub.w d4,d5    ; dz
  7671.  
  7672.  move.w sbr,d2
  7673.  sub.w fbr,d2
  7674.  sub.w d4,d6
  7675.  muls d6,d2
  7676.  divs d5,d2
  7677.  add.w fbr,d2
  7678.  move.w d2,sbr
  7679.  
  7680.  move.l (a1,d3*8),d2
  7681.  sub.l (a1,d1*8),d2    ; dx
  7682.  asr.l #7,d2
  7683.  muls d6,d2    ; new x coord
  7684.  divs d5,d2
  7685.  ext.l d2
  7686.  asl.l #7,d2
  7687.  add.l (a1,d1*8),d2
  7688.  move.w minz,d5
  7689.  move.w (a2,d1*2),d0
  7690.  divs d5,d2
  7691.  add.w MIDDLEX,d2
  7692.  move.l ypos,d1
  7693.  divs d4,d1
  7694.  move.w bottomline,d3 
  7695.  bra lineclippedGOUR
  7696.  
  7697. bothinfrontGOUR:
  7698.  
  7699. * Also, usefully enough, both are on-screen
  7700. * so no bottom clipping is needed.
  7701.  
  7702.  move.w (a2,d1*2),d0    ; first x
  7703.  move.w (a2,d3*2),d2    ; second x
  7704.  move.l ypos,d1
  7705.  move.l d1,d3
  7706.  divs d4,d1        ; first y
  7707.  divs d5,d3        ; second y
  7708. lineclippedGOUR:
  7709.  move.l #rightsidetab,a3
  7710.  cmp.w d1,d3
  7711.  bne linenotflatGOUR
  7712.  
  7713. ; move.w fbr,d4
  7714. ; move.w sbr,d5
  7715. ; cmp.w d0,d2
  7716. ; bgt.s .nsw
  7717. ; exg d4,d5
  7718. ;.nsw:
  7719.  
  7720. ; move.l #leftbrighttab,a3
  7721. ; move.w d4,(a3,d3.w)
  7722. ; move.l #rightbrighttab,a3
  7723. ; move.w d5,(a3,d3.w) 
  7724.  bra lineflatGOUR
  7725.  
  7726. linenotflatGOUR
  7727.  st drawit
  7728.  bgt lineonrightGOUR
  7729.  move.l #leftsidetab,a3
  7730.  exg d1,d3
  7731.  exg d0,d2
  7732.  
  7733.  lea (a3,d1*2),a3
  7734.  lea leftbrighttab-leftsidetab(a3),a4
  7735.  
  7736.  cmp.w top(pc),d1
  7737.  bge.s .nonewtop
  7738.  move.w d1,top
  7739. .nonewtop:
  7740.  cmp.w bottom(pc),d3
  7741.  ble.s .nonewbot
  7742.  move.w d3,bottom
  7743. .nonewbot:
  7744.  
  7745.  sub.w d1,d3    ; dy
  7746.  sub.w d0,d2    ; dx
  7747.  
  7748.  blt .linegoingleft
  7749.  
  7750.  ext.l d2
  7751.  divs d3,d2
  7752.  move.w d2,d6
  7753.  swap d2
  7754.  move.w d2,a5
  7755.  
  7756. ; moveq #0,d6
  7757. ; sub.w d3,d2
  7758. ; blt.s .noco
  7759. ;.makeco
  7760. ; addq #1,d6
  7761. ; sub.w d3,d2
  7762. ; bge.s .makeco
  7763. ;.noco
  7764. ; add.w d3,d2
  7765.  
  7766.  move.w d3,d4
  7767.  move.w d3,d5
  7768.  subq #1,d5
  7769.  move.w d6,d1
  7770.  addq #1,d1
  7771.  move.w d1,a6
  7772.  
  7773.  moveq #0,d1
  7774.  move.w sbr,d1
  7775.  move.w fbr,d2
  7776.  sub.w d1,d2
  7777.  ext.l d2
  7778.  asl.w #8,d2
  7779.  asl.w #2,d2
  7780.  divs d3,d2 
  7781.  ext.l d2
  7782.  asl.l #6,d2
  7783.  swap d1
  7784.  
  7785. .pixlopright:
  7786.  move.w d0,(a3)+
  7787.  swap d1
  7788.  move.w d1,(a4)+
  7789.  swap d1
  7790.  add.l d2,d1
  7791.  
  7792.  sub.w a5,d4
  7793.  bge.s .nobigstep
  7794.  add.w a6,d0
  7795.  add.w d3,d4
  7796.  dbra d5,.pixlopright
  7797.  bra lineflatGOUR
  7798. .nobigstep
  7799.  
  7800.  add.w d6,d0
  7801.  dbra d5,.pixlopright
  7802.  bra lineflatGOUR
  7803.  
  7804. .linegoingleft:
  7805.  
  7806.  neg.w d2
  7807.  
  7808.  ext.l d2
  7809.  divs d3,d2
  7810.  move.w d2,d6
  7811.  swap d2
  7812.  
  7813.  
  7814. ; moveq #0,d6
  7815. ; sub.w d3,d2
  7816. ; blt.s .nocol
  7817. ;.makecol
  7818. ; addq #1,d6
  7819. ; sub.w d3,d2
  7820. ; bge.s .makecol
  7821. ;.nocol
  7822. ; add.w d3,d2
  7823.  
  7824.  move.w d3,d4
  7825.  move.w d3,d5
  7826.  subq #1,d5
  7827.  
  7828.  move.w d6,d1
  7829.  addq #1,d1
  7830.  move.w d1,a6
  7831.  move.w d2,a5
  7832.  
  7833.  moveq #0,d1
  7834.  move.w sbr,d1
  7835.  move.w fbr,d2
  7836.  sub.w d1,d2
  7837.  ext.l d2
  7838.  asl.w #8,d2
  7839.  asl.w #2,d2
  7840.  divs d3,d2 
  7841.  ext.l d2
  7842.  asl.l #6,d2
  7843.  swap d1
  7844.  
  7845. .pixlopleft:
  7846.  
  7847.  swap d1
  7848.  move.w d1,(a4)+
  7849.  swap d1
  7850.  add.l d2,d1
  7851.  
  7852.  sub.w a5,d4
  7853.  bge.s .nobigstepl
  7854.  sub.w a6,d0
  7855.  add.w d3,d4
  7856.  move.w d0,(a3)+
  7857.  dbra d5,.pixlopleft
  7858.  bra lineflatGOUR
  7859.  
  7860. .nobigstepl
  7861.  sub.w d6,d0
  7862.  move.w d0,(a3)+
  7863.  dbra d5,.pixlopleft
  7864.  bra lineflatGOUR
  7865.  
  7866. lineonrightGOUR:
  7867.  
  7868.  lea (a3,d1*2),a3
  7869.  
  7870.  lea rightbrighttab-rightsidetab(a3),a4
  7871.  
  7872.  cmp.w top(pc),d1
  7873.  bge.s .nonewtop
  7874.  move.w d1,top
  7875. .nonewtop:
  7876.  cmp.w bottom(pc),d3
  7877.  ble.s .nonewbot
  7878.  move.w d3,bottom
  7879. .nonewbot:
  7880.  
  7881.  sub.w d1,d3    ; dy
  7882.  sub.w d0,d2    ; dx
  7883.  blt .linegoingleft
  7884. ; addq #1,d0
  7885.  ext.l d2
  7886.  divs d3,d2
  7887.  move.w d2,d6
  7888.  swap d2
  7889.  
  7890. ; moveq #0,d6
  7891. ; sub.w d3,d2
  7892. ; blt.s .noco
  7893. ;.makeco
  7894. ; addq #1,d6
  7895. ; sub.w d3,d2
  7896. ; bge.s .makeco
  7897. ;.noco
  7898. ; add.w d3,d2
  7899.  
  7900.  move.w d3,d4
  7901.  move.w d3,d5
  7902.  subq #1,d5
  7903.  move.w d6,d1
  7904.  addq #1,d1
  7905.  
  7906.  move.w d1,a6
  7907.  move.w d2,a5
  7908.  
  7909.  moveq #0,d1
  7910.  move.w fbr,d1
  7911.  move.w sbr,d2
  7912.  sub.w d1,d2
  7913.  ext.l d2
  7914.  asl.w #8,d2
  7915.  asl.w #2,d2
  7916.  divs d3,d2 
  7917.  ext.l d2
  7918.  asl.l #6,d2
  7919.  swap d1
  7920.  
  7921. .pixlopright:
  7922.  
  7923.  swap d1
  7924.  move.w d1,(a4)+
  7925.  swap d1
  7926.  add.l d2,d1
  7927.  
  7928.  sub.w a5,d4
  7929.  bge.s .nobigstep
  7930.  add.w a6,d0
  7931.  add.w d3,d4
  7932.  move.w d0,(a3)+
  7933.  dbra d5,.pixlopright
  7934.  bra lineflatGOUR
  7935.  
  7936. .nobigstep
  7937.  add.w d6,d0
  7938.  move.w d0,(a3)+
  7939.  dbra d5,.pixlopright
  7940.  bra lineflatGOUR
  7941.  
  7942. .linegoingleft:
  7943. ; addq #1,d0
  7944.  neg.w d2
  7945.  
  7946.  ext.l d2
  7947.  divs d3,d2
  7948.  move.w d2,d6
  7949.  swap d2
  7950.  
  7951.  
  7952. ; moveq #0,d6
  7953. ; sub.w d3,d2
  7954. ; blt.s .nocol
  7955. ;.makecol
  7956. ; addq #1,d6
  7957. ; sub.w d3,d2
  7958. ; bge.s .makecol
  7959. ;.nocol
  7960. ; add.w d3,d2
  7961.  
  7962.  move.w d3,d4
  7963.  move.w d3,d5
  7964.  subq #1,d5
  7965.  move.w d6,d1
  7966.  addq #1,d1
  7967.  move.w d1,a6
  7968.  move.w d2,a5
  7969.  
  7970.  moveq #0,d1
  7971.  move.w fbr,d1
  7972.  move.w sbr,d2
  7973.  sub.w d1,d2
  7974.  ext.l d2
  7975.  asl.w #8,d2
  7976.  asl.w #2,d2
  7977.  divs d3,d2 
  7978.  ext.l d2
  7979.  asl.l #6,d2
  7980.  swap d1
  7981.  
  7982. .pixlopleft:
  7983.  
  7984.  swap d1
  7985.  move.w d1,(a4)+
  7986.  swap d1
  7987.  add.l d2,d1
  7988.  
  7989.  move.w d0,(a3)+
  7990.  sub.w a5,d4
  7991.  bge.s .nobigstepl
  7992.  sub.w a6,d0
  7993.  add.w d3,d4
  7994.  dbra d5,.pixlopleft
  7995.  bra lineflatGOUR
  7996.  
  7997. .nobigstepl
  7998.  sub.w d6,d0
  7999.  dbra d5,.pixlopleft
  8000.  
  8001. lineflatGOUR:
  8002.  
  8003. bothbehindGOUR:
  8004.  dbra d7,sideloopGOUR
  8005.  
  8006. pastsides:
  8007.  
  8008.  addq #2,a0
  8009.  
  8010.  move.w #320,linedir
  8011.  
  8012. ; move.l FASTBUFFER2,a6
  8013. ; add.l BIGMIDDLEY,a6
  8014. ; move.l a6,REFPTR
  8015.  
  8016.  move.l FASTBUFFER,a6
  8017.  add.l BIGMIDDLEY,a6
  8018.  move.w (a0)+,d6
  8019.  add.w SMALLIT,d6
  8020.  move.w d6,scaleval
  8021.  move.w (a0)+,d6
  8022.  
  8023.  ifne CHEESEY
  8024.  move.w d6,d7    ; 000000XX000000YY
  8025.  lsr.w #6,d6
  8026.  add.w d6,d7    ; 000000XX0000XXYY
  8027.  
  8028.  and.b #%111,d6    ; 000000XX00000XYY
  8029.  add.b d7,d7    ; 000000XX0000XYY0
  8030.  asl.w #4,d7    ; 00XX0000 XYY00000
  8031.  and.w #%0010000011100000,d7
  8032.  move.w d7,d6
  8033.  endc
  8034.  
  8035.  move.w d6,whichtile
  8036.  move.w (a0)+,d6
  8037.  add.w ZoneBright,d6
  8038.  move.w d6,lighttype
  8039.  move.w above(pc),d6
  8040.  beq groundfloor
  8041. * on ceiling:
  8042.  move.w #-320,linedir
  8043.  suba.w #320,a6
  8044. groundfloor:
  8045.  
  8046.  move.w xoff,d6
  8047.  move.w zoff,d7
  8048.  add.w xwobxoff,d7
  8049.  add.w xwobzoff,d6
  8050.  ext.l d6
  8051.  ext.l d7
  8052.  
  8053.  tst.b FULLSCR
  8054.  beq.s .shiftit
  8055.  
  8056.  asl.l #2,d6
  8057.  asl.l #2,d7
  8058.  divs #3,d6
  8059.  divs #3,d7
  8060.  swap d6
  8061.  swap d7
  8062.  clr.w d6
  8063.  clr.w d7
  8064.  asr.l #2,d6
  8065.  asr.l #2,d7
  8066.  bra.s .donsht
  8067.  
  8068. .shiftit
  8069.  
  8070. ; divs #3,d6
  8071. ; divs #3,d7
  8072.  swap d6
  8073.  swap d7
  8074.  clr.w d6
  8075.  clr.w d7
  8076.  asr.l #1,d6
  8077.  asr.l #1,d7
  8078. .donsht:
  8079.  move.w scaleval(pc),d3
  8080.  beq.s .samescale
  8081.  bgt.s .scaledown
  8082.  neg.w d3
  8083.  asr.l d3,d7
  8084.  asr.l d3,d6
  8085.  bra.s .samescale
  8086. .scaledown:
  8087.  asl.l d3,d6
  8088.  asl.l d3,d7
  8089. .samescale
  8090.  
  8091.  ifne CHEESEY
  8092.  asr.l #1,d6
  8093.  asr.l #1,d7
  8094.  endc
  8095.  
  8096.  move.l d6,sxoff
  8097.  move.l d7,szoff
  8098.  bra pastscale 
  8099.  
  8100.  asr.l #3,d1
  8101.  asr.l #3,d2
  8102.  asr.l #2,d1
  8103.  asr.l #2,d2
  8104.  asr.l #1,d1
  8105.  asr.l #1,d2
  8106. scaleprogfrom
  8107.  nop
  8108.  nop
  8109.  asl.l #1,d1
  8110.  asl.l #1,d2
  8111.  asl.l #2,d1
  8112.  asl.l #2,d2
  8113.  asl.l #3,d1
  8114.  asl.l #3,d2
  8115.  
  8116. top: dc.w 0
  8117. bottom: dc.w 0
  8118. ypos: dc.l 0
  8119. nfloors: dc.w 0
  8120. lighttype: dc.w 0
  8121. above: dc.w 0 
  8122. linedir: dc.w 0
  8123. distaddr: dc.w 0
  8124.  
  8125. minz: dc.l 0
  8126.  
  8127. leftsidetab:
  8128.  ds.w 512*2
  8129. rightsidetab:
  8130.  ds.w 512*2
  8131. leftbrighttab:
  8132.  ds.w 512*2
  8133. rightbrighttab:
  8134.  ds.w 512*2
  8135.  
  8136. PointBrights:
  8137.  dc.l 0
  8138. CurrentPointBrights:
  8139.  ds.l 2*256*10
  8140.  
  8141. movespd: dc.w 0
  8142. largespd: dc.l 0
  8143. disttobot: dc.w 0
  8144.  
  8145. pastscale:
  8146.  
  8147.  
  8148.  tst.b drawit(pc)
  8149.  beq dontdrawfloor
  8150.  
  8151.  tst.b DOUBLEHEIGHT
  8152.  beq pix1h
  8153.  
  8154.  move.l a0,-(a7)
  8155.  move.w linedir,d1
  8156.  add.w d1,linedir
  8157.  
  8158.  move.l #leftsidetab,a4
  8159.  move.w top(pc),d1
  8160.  tst.w above
  8161.  beq.s .clipfloor
  8162.  
  8163.  sub.w #320,a6
  8164.  
  8165.  move.w MIDDLEY,d7
  8166.  subq #1,d7
  8167.  sub.w d1,d7
  8168.  move.w d7,disttobot
  8169.  
  8170.  move.w bottom(pc),d7
  8171.  move.w MIDDLEY,d3
  8172.  move.w d3,d4
  8173.  sub.w topclip,d3
  8174.  sub.w botclip,d4
  8175.  cmp.w d3,d1
  8176.  bge predontdrawfloor
  8177.  cmp.w d4,d7
  8178.  blt predontdrawfloor
  8179.  cmp.w d4,d1
  8180.  bge.s .nocliptoproof
  8181.  move.w d4,d1
  8182. .nocliptoproof
  8183.  cmp.w d3,d7
  8184.  blt .doneclip
  8185.  move.w d3,d7
  8186.  bra .doneclip
  8187.  
  8188. .clipfloor:
  8189.  move.w BOTTOMY,d7
  8190.  sub.w MIDDLEY,d7
  8191.  subq #1,d7
  8192.  sub.w d1,d7
  8193.  move.w d7,disttobot
  8194.  
  8195.  move.w bottom(pc),d7
  8196.  move.w botclip,d4
  8197.  sub.w MIDDLEY,d4
  8198.  cmp.w d4,d1
  8199.  bge predontdrawfloor
  8200.  move.w topclip,d3
  8201.  sub.w MIDDLEY,d3
  8202.  cmp.w d3,d1
  8203.  bge.s .nocliptopfloor
  8204.  move.w d3,d1
  8205. .nocliptopfloor 
  8206.  cmp.w d3,d7
  8207.  ble predontdrawfloor
  8208.  cmp.w d4,d7
  8209.  blt.s .noclipbotfloor
  8210.  move.w d4,d7
  8211. .noclipbotfloor:
  8212.  
  8213. .doneclip:
  8214.  
  8215.  lea (a4,d1*2),a4
  8216.  addq #1,d7
  8217.  sub.w d1,d7
  8218.  
  8219. ;moveq #0,d0
  8220.  asr.w #1,d1
  8221. ; addx d0,d1
  8222.  
  8223. ; move.l #dists,a2
  8224.  move.w distaddr,d0
  8225.  muls #64,d0
  8226.  move.l d0,a2
  8227. ; muls #25,d0
  8228. ; adda.w d0,a2
  8229. ; lea (a2,d1*2),a2
  8230.  asr.w #1,d7
  8231.  ble predontdrawfloor 
  8232.  move.w d1,d0
  8233.  bne.s .notzero
  8234.  moveq #1,d0
  8235. .notzero
  8236.  add.w d0,d0
  8237.  muls linedir,d1
  8238.  add.l d1,a6
  8239. ; sub.l d1,REFPTR
  8240.  move.l TexturePal,a1
  8241.  move.l LineToUse,a5
  8242.  
  8243.  move.w #4,tonextline
  8244.  
  8245.  bra pix2h
  8246.  
  8247. pix1h:
  8248.  
  8249.  move.l a0,-(a7)
  8250.  
  8251.  move.l #leftsidetab,a4
  8252.  move.w top(pc),d1
  8253.   
  8254.  tst.w above
  8255.  beq.s clipfloor
  8256.  
  8257.  move.w MIDDLEY,d7
  8258.  subq #1,d7
  8259.  sub.w d1,d7
  8260.  move.w d7,disttobot
  8261.  
  8262.  move.w bottom(pc),d7
  8263.  move.w MIDDLEY,d3
  8264.  move.w d3,d4
  8265.  sub.w topclip,d3
  8266.  sub.w botclip,d4
  8267.  cmp.w d3,d1
  8268.  bge predontdrawfloor
  8269.  cmp.w d4,d7
  8270.  blt predontdrawfloor
  8271.  cmp.w d4,d1
  8272.  bge.s .nocliptoproof
  8273.  move.w d4,d1
  8274. .nocliptoproof
  8275.  cmp.w d3,d7
  8276.  blt doneclip
  8277.  move.w d3,d7
  8278.  bra doneclip
  8279.  
  8280. clipfloor:
  8281.  move.w BOTTOMY,d7
  8282.  sub.w MIDDLEY,d7
  8283.  subq #1,d7
  8284.  sub.w d1,d7
  8285.  move.w d7,disttobot
  8286.  
  8287.  move.w bottom(pc),d7
  8288.  move.w botclip,d4
  8289.  sub.w MIDDLEY,d4
  8290.  cmp.w d4,d1
  8291.  bge predontdrawfloor
  8292.  move.w topclip,d3
  8293.  sub.w MIDDLEY,d3
  8294.  cmp.w d3,d1
  8295.  bge.s .nocliptopfloor
  8296.  move.w d3,d1
  8297. .nocliptopfloor 
  8298.  cmp.w d3,d7
  8299.  ble predontdrawfloor
  8300.  cmp.w d4,d7
  8301.  blt.s .noclipbotfloor
  8302.  move.w d4,d7
  8303. .noclipbotfloor:
  8304.  
  8305. doneclip:
  8306.  
  8307.  lea (a4,d1*2),a4
  8308. ; move.l #dists,a2
  8309.  move.w distaddr,d0
  8310.  muls #64,d0
  8311.  move.l d0,a2
  8312. ; muls #25,d0
  8313. ; adda.w d0,a2
  8314. ; lea (a2,d1*2),a2
  8315.  sub.w d1,d7
  8316.  ble predontdrawfloor 
  8317.  move.w d1,d0
  8318.  bne.s .notzero
  8319.  moveq #1,d0
  8320. .notzero
  8321.  muls linedir,d1
  8322.  add.l d1,a6
  8323. ; sub.l d1,REFPTR
  8324.  move.l TexturePal,a1
  8325.  move.l LineToUse,a5
  8326.  
  8327.  move.w #2,tonextline
  8328.  
  8329. pix2h:
  8330.  
  8331.  tst.b gourfloor
  8332.  bne dogourfloor
  8333.  
  8334.  tst.b anyclipping
  8335.  beq dofloornoclip
  8336.  
  8337. dofloor:
  8338. ; move.w (a2)+,d0
  8339.  move.w leftclip,d3
  8340.  move.w rightclip,d4
  8341.  move.w rightsidetab-leftsidetab(a4),d2
  8342.  
  8343.  addq #1,d2
  8344.  cmp.w d3,d2
  8345.  ble.s nodrawline
  8346.  cmp.w d4,d2
  8347.  ble.s noclipright
  8348.  move.w d4,d2
  8349. noclipright:
  8350.  move.w (a4),d1
  8351.  cmp.w d4,d1
  8352.  bge.s nodrawline
  8353.  cmp.w d3,d1
  8354.  bge.s noclipleft
  8355.  move.w d3,d1
  8356. noclipleft:
  8357.  cmp.w d1,d2
  8358.  ble.s nodrawline
  8359.  
  8360.  move.w d1,leftedge
  8361.  move.w d2,rightedge
  8362.  
  8363. ; moveq #0,d1
  8364. ; moveq #0,d3
  8365. ; move.w leftbrighttab-leftsidetab(a4),d1
  8366. ; bge.s .okbl
  8367. ; moveq #0,d1
  8368. ;.okbl:
  8369.  
  8370. ; move.w rightbrighttab-leftsidetab(a4),d3
  8371. ; bge.s .okbr
  8372. ; moveq #0,d3
  8373. ;.okbr:
  8374.  
  8375. ; sub.w d1,d3
  8376. ; asl.w #8,d1
  8377. ; move.l d1,leftbright
  8378. ; swap d3
  8379. ; asr.l #5,d3
  8380. ; divs d5,d3
  8381. ; move.w d3,d5
  8382. ; muls.w d6,d5
  8383. ; asr.l #3,d5
  8384. ; clr.b d5
  8385. ; add.w d5,leftbright+2
  8386.  
  8387. ; ext.l d3
  8388. ; asl.l #5,d3
  8389. ; swap d3
  8390. ; asl.w #8,d3
  8391. ; move.l d3,brightspd
  8392.  
  8393.  move.l a6,a3
  8394.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  8395.  move.l a2,d7
  8396.  asl.l #2,d7
  8397.  ext.l d0
  8398.  divs.l d0,d7
  8399.  move.l d7,d0
  8400.  jsr (a5)
  8401.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  8402. nodrawline
  8403.  sub.w #1,disttobot
  8404.  move.w linedir(pc),d3
  8405.  adda.w d3,a6
  8406. ; ext.l d3
  8407. ; sub.l d3,REFPTR
  8408.  move.w tonextline,d3
  8409.  add.w d3,a4
  8410.  asr.w #1,d3
  8411.  add.w d3,d0
  8412.  subq #1,d7
  8413.  bgt dofloor
  8414.  
  8415. predontdrawfloor
  8416.  move.l (a7)+,a0
  8417.  
  8418. dontdrawfloor:
  8419.  
  8420.  rts
  8421.  
  8422. tonextline: dc.w 0
  8423. anyclipping: dc.w 0
  8424.  
  8425. dofloornoclip:
  8426. ; move.w (a2)+,d0
  8427.  move.w rightsidetab-leftsidetab(a4),d2
  8428.  addq #1,d2
  8429.  move.w (a4),d1
  8430.  move.w d1,leftedge
  8431.  move.w d2,rightedge
  8432.  
  8433. ; sub.w d1,d2
  8434.  
  8435. ; moveq #0,d1
  8436. ; moveq #0,d3
  8437. ; move.w leftbrighttab-leftsidetab(a4),d1
  8438. ; bge.s .okbl
  8439. ; moveq #0,d1
  8440. ;.okbl:
  8441.  
  8442. ; move.w rightbrighttab-leftsidetab(a4),d3
  8443. ; bge.s .okbr
  8444. ; moveq #0,d3
  8445. ;.okbr:
  8446.  
  8447. ; sub.w d1,d3
  8448. ; asl.w #8,d1
  8449. ; move.l d1,leftbright
  8450. ; swap d3
  8451. ; asr.l #5,d3
  8452. ; divs d2,d3
  8453. ; ext.l d3
  8454. ; asl.l #5,d3
  8455. ; swap d3
  8456. ; asl.w #8,d3
  8457. ; move.l d3,brightspd
  8458.  
  8459.  move.l a6,a3
  8460.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  8461.  move.l a2,d7
  8462.  asl.l #2,d7
  8463.  ext.l d0
  8464.  divs.l d0,d7
  8465.  move.l d7,d0
  8466.  jsr (a5)
  8467.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  8468.  sub.w #1,disttobot
  8469.  move.w linedir(pc),d3
  8470.  adda.w d3,a6
  8471. ; ext.l d3
  8472. ; sub.l d3,REFPTR
  8473.  move.w tonextline,d3
  8474.  add.w d3,a4
  8475.  asr.w #1,d3
  8476.  add.w d3,d0
  8477.  subq #1,d7
  8478.  bgt dofloornoclip
  8479.  
  8480.  bra predontdrawfloor
  8481.  
  8482. dogourfloor:
  8483.  tst.b anyclipping
  8484.  beq dofloornoclipGOUR
  8485.  
  8486. dofloorGOUR:
  8487. ; move.w (a2)+,d0
  8488.  move.w leftclip,d3
  8489.  move.w rightclip,d4
  8490.  move.w rightsidetab-leftsidetab(a4),d2
  8491.  
  8492.  move.w d2,d5
  8493.  sub.w (a4),d5
  8494.  addq #1,d5
  8495.  moveq #0,d6
  8496.  
  8497.  addq #1,d2
  8498.  cmp.w d3,d2
  8499.  ble nodrawlineGOUR
  8500.  cmp.w d4,d2
  8501.  ble.s nocliprightGOUR
  8502.  move.w d4,d2
  8503. nocliprightGOUR:
  8504.  move.w (a4),d1
  8505.  cmp.w d4,d1
  8506.  bge nodrawlineGOUR
  8507.  cmp.w d3,d1
  8508.  bge.s noclipleftGOUR
  8509.  move.w d3,d6
  8510.  subq #1,d6
  8511.  sub.w d1,d6
  8512.  move.w d3,d1
  8513. noclipleftGOUR:
  8514.  cmp.w d1,d2
  8515.  ble nodrawlineGOUR
  8516.  
  8517.  move.w d1,leftedge
  8518.  move.w d2,rightedge
  8519.  
  8520.  move.l a2,d2
  8521.  asl.l #2,d2
  8522.  ext.l d0
  8523.  divs.l d0,d2
  8524.  move.l d2,dst
  8525.  asr.l #7,d2
  8526.  asr.l #2,d2
  8527. ; addq #5,d2
  8528. ; add.w lighttype,d2
  8529.  
  8530.  moveq #0,d1
  8531.  moveq #0,d3
  8532.  move.w leftbrighttab-leftsidetab(a4),d1
  8533.  add.w d2,d1
  8534.  bge.s .okbl
  8535.  moveq #0,d1
  8536. .okbl:
  8537. ; asr.w #1,d1
  8538.  cmp.w #30,d1
  8539.  ble.s .okdl
  8540.  move.w #30,d1
  8541. .okdl:
  8542.  
  8543.  move.w rightbrighttab-leftsidetab(a4),d3
  8544.  add.w d2,d3
  8545.  bge.s .okbr
  8546.  moveq #0,d3
  8547. .okbr:
  8548. ; asr.w #1,d3
  8549.  cmp.w #30,d3
  8550.  ble.s .okdr
  8551.  move.w #30,d3
  8552. .okdr:
  8553.  
  8554.  sub.w d1,d3
  8555.  asl.w #8,d1
  8556.  move.w d1,leftbright
  8557.  swap d3
  8558.  tst.l d3
  8559.  bgt.s .OKITSPOSALREADY 
  8560.  neg.l d3
  8561.  asr.l #6,d3
  8562.  divs d5,d3
  8563.  neg.w d3
  8564.  bra.s .OKNOWITSNEG
  8565.  
  8566. .OKITSPOSALREADY
  8567.  asr.l #6,d3
  8568.  divs d5,d3
  8569. .OKNOWITSNEG
  8570.  muls d3,d6
  8571.  add.w #256*4,d6
  8572.  asr.w #2,d6
  8573.  clr.b d6
  8574.  add.w leftbright,d6
  8575.  bge.s .oklbnn
  8576.  moveq #0,d6
  8577. .oklbnn:
  8578.  move.w d6,leftbright
  8579.  
  8580.  ext.l d3
  8581.  asr.l #2,d3
  8582. ; swap d3
  8583. ; asl.w #8,d3
  8584.  move.w d3,brightspd
  8585.  
  8586.  move.l a6,a3
  8587.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  8588.  move.l dst,d0
  8589.  move.l TexturePal,a1
  8590.  move.l floortile,a0
  8591.  adda.w whichtile,a0
  8592.  jsr pastfloorbright
  8593.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  8594. nodrawlineGOUR
  8595.  
  8596.  sub.w #1,disttobot
  8597.  
  8598.  move.w linedir(pc),d3
  8599.  adda.w d3,a6
  8600. ; ext.l d3
  8601. ; sub.l d3,REFPTR
  8602.  move.w tonextline,d3
  8603.  add.w d3,a4
  8604.  asr.w #1,d3
  8605.  add.w d3,d0
  8606.  subq #1,d7
  8607.  bgt dofloorGOUR
  8608.  
  8609. predontdrawfloorGOUR
  8610.  move.l (a7)+,a0
  8611.  
  8612. dontdrawfloorGOUR:
  8613.  
  8614.  rts
  8615.  
  8616. REFPTR: dc.l 0
  8617.  
  8618. dofloornoclipGOUR:
  8619. ; move.w (a2)+,d0
  8620.  move.w rightsidetab-leftsidetab(a4),d2
  8621.  addq #1,d2
  8622.  move.w (a4),d1
  8623.  move.w d1,leftedge
  8624.  move.w d2,rightedge
  8625.  
  8626.  sub.w d1,d2
  8627.  
  8628.  move.l a2,d6
  8629.  asl.l #2,d6
  8630.  ext.l d0
  8631.  divs.l d0,d6
  8632.  move.l d6,d5
  8633.  asr.l #7,d5
  8634.  asr.l #2,d5
  8635. ; addq #5,d5
  8636. ; add.w lighttype,d5
  8637.  
  8638.  moveq #0,d1
  8639.  moveq #0,d3
  8640.  move.w leftbrighttab-leftsidetab(a4),d1
  8641.  add.w d5,d1
  8642.  bge.s .okbl
  8643.  moveq #0,d1
  8644. .okbl:
  8645. ; asr.w #1,d1
  8646.  cmp.w #30,d1
  8647.  ble.s .okdl
  8648.  move.w #30,d1
  8649. .okdl:
  8650.  
  8651.  move.w rightbrighttab-leftsidetab(a4),d3
  8652.  add.w d5,d3
  8653.  bge.s .okbr
  8654.  moveq #0,d3
  8655. .okbr:
  8656. ; asr.w #1,d3
  8657.  cmp.w #30,d3
  8658.  ble.s .okdr
  8659.  move.w #30,d3
  8660. .okdr:
  8661.  
  8662. ; sub.w d1,d3
  8663. ; asl.w #8,d1
  8664. ; move.l d1,leftbright
  8665. ; swap d3
  8666. ; asr.l #5,d3
  8667. ; divs d2,d3
  8668. ; ext.l d3
  8669. ; asl.l #5,d3
  8670. ; swap d3
  8671. ; asl.w #8,d3
  8672. ; move.l d3,brightspd
  8673.  
  8674.  sub.w d1,d3
  8675.  asl.w #8,d1
  8676.  move.w d1,leftbright
  8677.  swap d3
  8678.  ext.l d2
  8679.  divs.l d2,d3
  8680.  asr.l #8,d3
  8681.  move.w d3,brightspd
  8682.  
  8683.  move.l a6,a3
  8684.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  8685.  move.l d6,d0
  8686.  move.l d0,dst
  8687.  move.l TexturePal,a1
  8688.  move.l floortile,a0
  8689.  adda.w whichtile,a0
  8690.  jsr pastfloorbright
  8691.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  8692.  sub.w #1,disttobot
  8693.  
  8694.  move.w linedir(pc),d3
  8695.  adda.w d3,a6
  8696. ; ext.l d3
  8697. ; sub.l d3,REFPTR
  8698.  
  8699.  move.w tonextline,d3
  8700.  add.w d3,a4
  8701.  asr.w #1,d3
  8702.  add.w d3,d0
  8703.  subq #1,d7
  8704.  bgt dofloornoclipGOUR
  8705.  
  8706.  bra predontdrawfloorGOUR
  8707.  
  8708.  
  8709.  
  8710. dists:
  8711. ; incbin "floordists"
  8712. drawit: dc.w 0
  8713.  
  8714. LineToUse: dc.l 0
  8715.  
  8716. ***************************
  8717. * Right then, time for the floor
  8718. * routine...
  8719. * For test purposes, give it
  8720. * a3 = point to screen
  8721. * d0= z distance away
  8722. * and sinval+cosval must be set up.
  8723. ***************************
  8724.  
  8725. BLACKFLOOR:
  8726.  moveq #0,d0
  8727.  bra.s DOBLACK
  8728.  
  8729. SimpleFloorLine:
  8730.  
  8731.  CACHE_OFF d2
  8732.  
  8733.  move.l #doacrossline,a1
  8734.  move.w leftedge(pc),d1
  8735.  move.w rightedge(pc),d3
  8736.  sub.w d1,d3
  8737.  lea (a1,d1.w*4),a1
  8738.  move.w (a1,d3.w*4),d4
  8739.  move.w #$4e75,(a1,d3.w*4)
  8740.  
  8741.  tst.b CLRNOFLOOR
  8742.  bne.s BLACKFLOOR
  8743.  
  8744.  move.l #PLAINSCALE,a2
  8745.  
  8746.  move.w d0,d2
  8747.  move.w lighttype,d1
  8748.  asr.w #8,d2
  8749.  add.w #5,d1
  8750.  add.w d2,d1
  8751.  bge.s .fixedbright
  8752.  moveq #0,d1
  8753. .fixedbright:
  8754.  cmp.w #28,d1
  8755.  ble.s .smallbright
  8756.  move.w #28,d1
  8757. .smallbright:
  8758.  lea (a2,d1.w*2),a2
  8759.  
  8760.  move.w whichtile,d0
  8761.  move.w d0,d1
  8762.  and.w #$3,d1
  8763.  and.w #$300,d0
  8764.  lsl.b #6,d1
  8765.  move.b d1,d0
  8766.  move.w d0,tstwhich
  8767.  move.w (a2,d0.w),d0
  8768.  
  8769. DOBLACK:
  8770.  jsr (a1)
  8771.  move.w d4,(a1,d3.w*4)
  8772.  
  8773.  CACHE_ON d2
  8774.  
  8775.  rts
  8776.  
  8777. tstwhich: dc.w 0
  8778. whichtile: dc.w 0
  8779.   
  8780. PLAINSCALE: 
  8781. ;incbin "ab3:includes/plainscale"
  8782.   
  8783. storeit: dc.l 0
  8784.  
  8785. doacrossline:
  8786. val SET 0
  8787.  REPT 32
  8788.  move.w d0,val(a3)
  8789. val SET val+4
  8790.  ENDR
  8791. val SET val+4
  8792.  REPT 32
  8793.  move.w d0,val(a3)
  8794. val SET val+4
  8795.  ENDR
  8796. val SET val+4
  8797.  REPT 32
  8798.  move.w d0,val(a3)
  8799. val SET val+4
  8800.  ENDR
  8801.  rts
  8802.  
  8803.  
  8804. leftedge: dc.w 0
  8805. rightedge: dc.w 0
  8806.  
  8807. rndpt: dc.l rndtab
  8808.  
  8809.  
  8810. dst: dc.l 0
  8811.  
  8812. FloorLine:
  8813.  
  8814.  move.l floortile,a0
  8815.  adda.w whichtile,a0
  8816.  move.w lighttype,d1
  8817.  move.l d0,dst    ; *4
  8818.  move.l d0,d2    ; *4
  8819. *********************
  8820. * Old version
  8821.  asr.l #2,d2
  8822.  asr.l #8,d2
  8823.  add.w #5,d1
  8824. *********************
  8825. ; asr.w #3,d2
  8826. ; sub.w #4,d2
  8827. ; cmp.w #6,d2
  8828. ; blt.s flbrbr
  8829. ; move.w #6,d2
  8830. ;flbrbr:
  8831. *********************
  8832.  add.w d2,d1
  8833.  bge.s .fixedbright
  8834.  moveq #0,d1
  8835. .fixedbright:
  8836.  cmp.w #28,d1
  8837.  ble.s .smallbright
  8838.  move.w #28,d1
  8839. .smallbright:
  8840.  move.l TexturePal,a1
  8841.  add.l floorbright(pc,d1.w*4),a1
  8842.  bra pastfloorbright
  8843.  
  8844. ConstCol: dc.w 0
  8845.  
  8846. BumpLine:
  8847.  
  8848.  tst.b smoothbumps
  8849.  beq.s Chunky
  8850.  
  8851.  move.l #SmoothTile,a0
  8852.  lea Smoothscalecols,a1
  8853.  bra pastast
  8854.  
  8855. Chunky:
  8856.  
  8857.  moveq #0,d2
  8858.  move.l #Bumptile,a0
  8859.  move.w whichtile,d2
  8860.  adda.w d2,a0
  8861.  ror.l #2,d2
  8862.  lsr.w #6,d2
  8863.  rol.l #2,d2
  8864.  and.w #15,d2
  8865.  move.l #ConstCols,a1
  8866.  move.w (a1,d2.w*2),ConstCol
  8867.  lea Bumpscalecols,a1
  8868.  
  8869. pastast:
  8870.  move.w lighttype,d1
  8871.  
  8872.  move.l d0,dst
  8873.  
  8874.  move.l d0,d2
  8875. *********************
  8876. * Old version
  8877.  asr.l #2,d2
  8878.  asr.l #8,d2
  8879.  add.w #5,d1
  8880. *********************
  8881. ; asr.w #3,d2
  8882. ; sub.w #4,d2
  8883. ; cmp.w #6,d2
  8884. ; blt.s flbrbr
  8885. ; move.w #6,d2
  8886. ;flbrbr:
  8887. *********************
  8888.  add.w d2,d1
  8889.  bge.s .fixedbright
  8890.  moveq #0,d1
  8891. .fixedbright:
  8892.  cmp.w #31,d1
  8893.  ble.s .smallbright
  8894.  move.w #31,d1
  8895. .smallbright:
  8896.  add.l floorbright(pc,d1.w*4),a1
  8897.  bra pastfloorbright
  8898.  
  8899.  
  8900. floorbright:
  8901.  dc.l 512*0
  8902.  dc.l 512*1
  8903.  dc.l 512*2
  8904.  dc.l 512*3
  8905.  dc.l 512*4
  8906.  
  8907.  dc.l 512*5
  8908.  dc.l 512*6
  8909.  dc.l 512*7
  8910.  dc.l 512*8
  8911.  dc.l 512*9
  8912.  
  8913.  dc.l 512*10
  8914.  dc.l 512*11
  8915.  dc.l 512*12
  8916.  dc.l 512*13
  8917.  dc.l 512*14
  8918.  
  8919.  dc.l 512*15
  8920.  dc.l 512*16
  8921.  dc.l 512*17
  8922.  dc.l 512*18
  8923.  dc.l 512*19
  8924.  
  8925.  dc.l 512*20
  8926.  dc.l 512*21
  8927.  dc.l 512*22
  8928.  dc.l 512*23
  8929.  dc.l 512*24
  8930.  
  8931.  dc.l 512*25
  8932.  dc.l 512*26
  8933.  dc.l 512*27
  8934.  dc.l 512*28
  8935.  dc.l 512*29
  8936.  
  8937.  dc.l 512*30
  8938.  dc.l 512*31
  8939.  
  8940. widthleft: dc.w 0
  8941. scaleval: dc.w 0
  8942. sxoff: dc.l 0
  8943. szoff: dc.l 0
  8944. xoff34: dc.w 0
  8945. zoff34: dc.w 0
  8946. scosval: dc.w 0
  8947. ssinval: dc.w 0
  8948.  
  8949.  
  8950. floorsetbright:
  8951.  move.l #walltiles,a0
  8952.  
  8953. pastfloorbright:
  8954.  
  8955.  move.l d0,d1
  8956.  muls cosval,d1    ; change in x across whole width
  8957.  move.l d0,d2
  8958.  muls sinval,d2    ; change in z across whole width
  8959.  neg.l d2
  8960.  ifne CHEESEY
  8961.  asr.l #3,d2
  8962.  asr.l #3,d1
  8963.  endc
  8964.  ifeq CHEESEY
  8965.  asr.l #2,d2
  8966.  asr.l #2,d1
  8967.  endc
  8968. scaleprog:
  8969.  move.w scaleval(pc),d3
  8970.  beq.s .samescale
  8971.  bgt.s .scaledown
  8972.  neg.w d3
  8973.  asr.l d3,d1
  8974.  asr.l d3,d2
  8975.  bra.s .samescale
  8976. .scaledown:
  8977.  asl.l d3,d1
  8978.  asl.l d3,d2
  8979. .samescale
  8980.  
  8981.  
  8982.  move.l d1,d3 ;    z cos
  8983.  move.l d3,d6
  8984.  move.l d3,d5
  8985.  asr.l #1,d6
  8986.  add.l d6,d3
  8987.  asr.l #1,d3
  8988.  
  8989.  move.l d2,d4    ; z sin
  8990.  move.l d4,d6
  8991.  asr.l #1,d6
  8992.  add.l d4,d6
  8993.  add.l d3,d4
  8994.  neg.l d4    ; start x
  8995.  
  8996.  asr.l #1,d6    ; zsin/2
  8997.  sub.l d6,d5    ; start z
  8998.  
  8999.  add.l sxoff,d4
  9000.  add.l szoff,d5
  9001.  
  9002.  tst.b FULLSCR
  9003.  beq.s .nob
  9004.  
  9005.  moveq #0,d6
  9006.  move.w leftedge(pc),d6
  9007.  beq.s .nomultleftB
  9008.  
  9009.  add.l d6,d6
  9010.  divs #3,d6
  9011.  ext.l d6
  9012.  
  9013.  move.l d1,a4
  9014.  move.l d2,a5
  9015.  
  9016.  muls.l d6,d1
  9017.  asr.l #7,d1
  9018.  add.l d1,d4
  9019.  
  9020.  muls.l d6,d2
  9021.  asr.l #7,d2
  9022.  add.l d2,d5
  9023.  move.l a4,d1
  9024.  move.l a5,d2
  9025.  
  9026.  move.w leftedge(pc),d6
  9027.  
  9028. .nomultleftB:
  9029.  
  9030.  move.w d4,startsmoothx
  9031.  move.w d5,startsmoothz
  9032.  
  9033.  asr.l #8,d4
  9034.  asl.l #8,d5
  9035. ; add.w szoff,d5
  9036. ; add.w sxoff,d4
  9037. ; and.w #63,d4
  9038. ; and.w #63*256,d5
  9039.  
  9040.  move.w d4,d5
  9041.  
  9042.  asr.l #6,d1
  9043.  asr.l #6,d2
  9044.  divs.l #3,d1
  9045.  divs.l #3,d2
  9046.  
  9047.  bra.s doneallmult
  9048.  
  9049. .nob 
  9050.  
  9051.  moveq #0,d6
  9052.  move.w leftedge(pc),d6
  9053.  beq.s nomultleft
  9054.  
  9055.  move.l d1,a4
  9056.  move.l d2,a5
  9057.  
  9058.  muls.l d6,d1
  9059.  asr.l #7,d1
  9060.  add.l d1,d4
  9061.  
  9062.  muls.l d6,d2
  9063.  asr.l #7,d2
  9064.  add.l d2,d5
  9065.  move.l a4,d1
  9066.  move.l a5,d2
  9067.  
  9068.  move.w leftedge(pc),d6
  9069.  
  9070. nomultleft:
  9071.  
  9072.  move.w d4,startsmoothx
  9073.  move.w d5,startsmoothz
  9074.  
  9075.  asr.l #8,d4
  9076.  asl.l #8,d5
  9077.  
  9078.  
  9079. ; add.w szoff,d5
  9080. ; add.w sxoff,d4
  9081. ; and.w #63,d4
  9082. ; and.w #63*256,d5
  9083.  
  9084.  move.w d4,d5
  9085.  
  9086.  asr.l #7,d1
  9087.  asr.l #7,d2
  9088. ; divs.l #3,d1
  9089. ; divs.l #3,d2
  9090.  
  9091. doneallmult:
  9092.  
  9093.  move.w d1,a4
  9094.  move.w d2,a5
  9095.  asl.l #8,d2
  9096. ; and.w #%0011111100000000,d2
  9097.  asr.l #8,d1
  9098.  move.w d1,d2
  9099.  ifeq CHEESEY
  9100.  move.l #$3fff3fff,d1
  9101.  endc
  9102.  ifne CHEESEY
  9103.  move.l #$1fff1fff,d1
  9104.  endc
  9105.  and.l d1,d5
  9106. ; swap d5
  9107. ; move.w startsmoothz,d5
  9108. ; swap d5
  9109. ; swap d2
  9110. ; move.w a5,d2
  9111. ; swap d2
  9112.  
  9113. ***********************************
  9114.  
  9115.  
  9116.  tst.b DOUBLEWIDTH
  9117.  beq.s .nodoub
  9118.  
  9119.  and.b #$fe,d6
  9120.  
  9121.  move.w d6,a2
  9122.  moveq #0,d0 
  9123.  move.w rightedge(pc),d3 
  9124.  lea (a3,a2.w),a3 
  9125.  move.w d3,d7
  9126.  sub.w a2,d7
  9127.  asr.w #1,d7
  9128.  move.w startsmoothx,d3
  9129.  
  9130.  tst.b usewater
  9131.  bne texturedwaterDOUB
  9132. ; tst.b gourfloor
  9133.  bra gouraudfloorDOUB
  9134.  
  9135. .nodoub:
  9136.  
  9137.  move.w d6,a2
  9138.  moveq #0,d0 
  9139.  move.w rightedge(pc),d3 
  9140.  lea (a3,a2.w),a3 
  9141.  move.w d3,d7
  9142.  sub.w a2,d7
  9143.  
  9144. intofirststrip:
  9145. allintofirst:
  9146.  
  9147.  move.w startsmoothx,d3
  9148.  
  9149. tstwat:
  9150.  
  9151.  tst.b usewater
  9152.  bne texturedwater
  9153. ; tst.b gourfloor
  9154.  bra gouraudfloor
  9155.  
  9156.  
  9157.  
  9158. ******************************
  9159. * BumpMap the floor/ceiling! *
  9160.  tst.b usebumps
  9161.  bne.s BumpMap
  9162. ******************************
  9163.  
  9164. ordinary:
  9165.  moveq #0,d0
  9166.  
  9167.  dbra d7,acrossscrn
  9168.  rts
  9169.  
  9170. usebumps: dc.w $0
  9171. smoothbumps: dc.w $0
  9172. gourfloor: dc.w 0
  9173.  
  9174.  include "ab3:source_4000/bumpmap.s"
  9175.  
  9176.  CNOP 0,4
  9177. backbefore:
  9178.  and.w d1,d5
  9179.  move.b (a0,d5.w*4),d0
  9180.  add.w a4,d3
  9181.  addx.l d6,d5
  9182.  move.w (a1,d0.w*2),(a3)
  9183.  addq #4,a3
  9184.  dbcs d7,acrossscrn
  9185.  dbcc d7,backbefore
  9186.  bra.s past1
  9187.  
  9188. acrossscrn:
  9189.  and.w d1,d5
  9190.  move.b (a0,d5.w*4),d0
  9191.  add.w a4,d3
  9192.  addx.l d2,d5
  9193.  move.w (a1,d0.w*2),(a3)
  9194.  addq #4,a3
  9195.  dbcs d7,acrossscrn
  9196.  dbcc d7,backbefore
  9197. past1:
  9198.  bcc.s gotoacross
  9199.  
  9200.  move.w d4,d7
  9201.  bne.s .notdoneyet
  9202.  rts
  9203. .notdoneyet:
  9204.  
  9205.  cmp.w #32,d7
  9206.  ble.s .notoowide
  9207.  move.w #32,d7
  9208. .notoowide
  9209.  sub.w d7,d4  
  9210.  addq #4,a3
  9211.  
  9212.  dbra d7,backbefore
  9213.  rts
  9214.  
  9215.  
  9216. gotoacross:
  9217.  
  9218.  move.w d4,d7
  9219.  bne.s .notdoneyet
  9220.  rts
  9221. .notdoneyet:
  9222.  
  9223.  cmp.w #32,d7
  9224.  ble.s .notoowide
  9225.  move.w #32,d7
  9226. .notoowide
  9227.  sub.w d7,d4  
  9228.  addq #4,a3
  9229.  
  9230.  dbra d7,acrossscrn
  9231.  rts
  9232.  
  9233. leftbright: dc.l 0
  9234. brightspd: dc.l 0
  9235.  
  9236. gouraudfloor:
  9237.  
  9238.  move.w leftbright,d0
  9239.  move.l d1,d4
  9240.  move.w brightspd,d1
  9241.  
  9242.  move.w d7,d3
  9243.  asr.w #1,d7
  9244.  btst #0,d3
  9245.  beq.s .nosingle1
  9246.  move.w d5,d3
  9247.  move.l d5,d6
  9248.  lsr.w #8,d3
  9249.  swap d6
  9250.  move.b d3,d6
  9251.  move.w d0,d3
  9252.  ifeq CHEESEY
  9253.  move.b (a0,d6.w*4),d3
  9254.  endc
  9255.  ifne CHEESEY
  9256.  move.b (a0,d6.w),d3
  9257.  endc
  9258.  
  9259.  add.w d1,d0
  9260.  add.l d2,d5
  9261.  and.l d4,d5
  9262.  move.b (a1,d3.w),(a3)+
  9263. .nosingle1
  9264.  
  9265.  move.w d7,d3
  9266.  asr.w #1,d7
  9267.  btst #0,d3
  9268.  beq.s .nosingle2
  9269.  move.w d5,d3
  9270.  move.l d5,d6
  9271.  lsr.w #8,d3
  9272.  swap d6
  9273.  move.b d3,d6
  9274.  move.w d0,d3
  9275.  ifeq CHEESEY
  9276.  move.b (a0,d6.w*4),d3
  9277.  endc
  9278.  ifne CHEESEY
  9279.  move.b (a0,d6.w),d3
  9280.  endc
  9281.  add.w d1,d0
  9282.  add.l d2,d5
  9283.  and.l d4,d5
  9284.  move.l d5,d6
  9285.  swap d6
  9286.  move.b (a1,d3.w),(a3)+
  9287.  move.w d5,d3
  9288.  lsr.w #8,d3
  9289.  move.b d3,d6
  9290.  move.w d0,d3
  9291.  ifeq CHEESEY
  9292.  move.b (a0,d6.w*4),d3
  9293.  endc
  9294.  ifne CHEESEY
  9295.  move.b (a0,d6.w),d3
  9296.  endc
  9297.  add.w d1,d0
  9298.  add.l d2,d5
  9299.  and.l d4,d5
  9300.  move.b (a1,d3.w),(a3)+
  9301.  
  9302. .nosingle2
  9303.  
  9304.  move.l d5,d6
  9305.  swap d6
  9306.  
  9307.  dbra d7,acrossscrngour
  9308.  rts
  9309.  
  9310.  CNOP 0,4
  9311.  
  9312. acrossscrngour:
  9313.  move.w d5,d3
  9314.  lsr.w #8,d3
  9315.  move.b d3,d6
  9316.  move.w d0,d3
  9317.  ifeq CHEESEY
  9318.  move.b (a0,d6.w*4),d3
  9319.  endc
  9320.  ifne CHEESEY
  9321.  move.b (a0,d6.w),d3
  9322.  endc
  9323.  add.w d1,d0
  9324.  add.l d2,d5
  9325.  and.l d4,d5
  9326.  move.l d5,d6
  9327.  swap d6
  9328.  move.b (a1,d3.w),(a3)+
  9329.  move.w d5,d3
  9330.  lsr.w #8,d3
  9331.  move.b d3,d6
  9332.  move.w d0,d3
  9333.  ifeq CHEESEY
  9334.  move.b (a0,d6.w*4),d3
  9335.  endc
  9336.  ifne CHEESEY
  9337.  move.b (a0,d6.w),d3
  9338.  endc
  9339.  add.w d1,d0
  9340.  add.l d2,d5
  9341.  and.l d4,d5
  9342.  move.l d5,d6
  9343.  swap d6
  9344.  move.b (a1,d3.w),(a3)+
  9345.  move.w d5,d3
  9346.  lsr.w #8,d3
  9347.  move.b d3,d6
  9348.  move.w d0,d3
  9349.  ifeq CHEESEY
  9350.  move.b (a0,d6.w*4),d3
  9351.  endc
  9352.  ifne CHEESEY
  9353.  move.b (a0,d6.w),d3
  9354.  endc
  9355.  add.w d1,d0
  9356.  add.l d2,d5
  9357.  and.l d4,d5
  9358.  move.l d5,d6
  9359.  swap d6
  9360.  move.b (a1,d3.w),(a3)+
  9361.  move.w d5,d3
  9362.  lsr.w #8,d3
  9363.  move.b d3,d6
  9364.  move.w d0,d3
  9365.  ifeq CHEESEY
  9366.  move.b (a0,d6.w*4),d3
  9367.  endc
  9368.  ifne CHEESEY
  9369.  move.b (a0,d6.w),d3
  9370.  endc
  9371.  add.w d1,d0
  9372.  add.l d2,d5
  9373.  and.l d4,d5
  9374.  move.l d5,d6
  9375.  swap d6
  9376.  move.b (a1,d3.w),(a3)+
  9377.  dbra d7,acrossscrngour
  9378.  
  9379.  rts
  9380.  
  9381.  
  9382. gouraudfloorDOUB:
  9383.  
  9384.  move.w leftbright,d0
  9385.  move.l d1,d4
  9386.  move.w brightspd,d1
  9387.  add.w d1,d1
  9388.  add.l d2,d2
  9389.  
  9390.  move.w d7,d3
  9391.  asr.w #1,d7
  9392.  btst #0,d3
  9393.  beq.s .nosingle1
  9394.  move.w d5,d3
  9395.  move.l d5,d6
  9396.  lsr.w #8,d3
  9397.  swap d6
  9398.  move.b d3,d6
  9399.  move.w d0,d3
  9400.  ifeq CHEESEY
  9401.  move.b (a0,d6.w*4),d3
  9402.  endc
  9403.  ifne CHEESEY
  9404.  move.b (a0,d6.w),d3
  9405.  endc
  9406.  add.w d1,d0
  9407.  add.l d2,d5
  9408.  and.l d4,d5
  9409.  move.w (a1,d3.w),(a3)+
  9410. .nosingle1
  9411.  
  9412.  move.w d7,d3
  9413.  asr.w #1,d7
  9414.  btst #0,d3
  9415.  beq.s .nosingle2
  9416.  move.w d5,d3
  9417.  move.l d5,d6
  9418.  lsr.w #8,d3
  9419.  swap d6
  9420.  move.b d3,d6
  9421.  move.w d0,d3
  9422.  ifeq CHEESEY
  9423.  move.b (a0,d6.w*4),d3
  9424.  endc
  9425.  ifne CHEESEY
  9426.  move.b (a0,d6.w),d3
  9427.  endc
  9428.  add.w d1,d0
  9429.  add.l d2,d5
  9430.  and.l d4,d5
  9431.  move.l d5,d6
  9432.  swap d6
  9433.  move.w (a1,d3.w),(a3)+
  9434.  move.w d5,d3
  9435.  lsr.w #8,d3
  9436.  move.b d3,d6
  9437.  move.w d0,d3
  9438.  ifeq CHEESEY
  9439.  move.b (a0,d6.w*4),d3
  9440.  endc
  9441.  ifne CHEESEY
  9442.  move.b (a0,d6.w),d3
  9443.  endc
  9444.  add.w d1,d0
  9445.  add.l d2,d5
  9446.  and.l d4,d5
  9447.  move.w (a1,d3.w),(a3)+
  9448.  
  9449. .nosingle2
  9450.  
  9451.  move.l d5,d6
  9452.  swap d6
  9453.  
  9454.  dbra d7,acrossscrngourD
  9455.  rts
  9456.  
  9457.  CNOP 0,4
  9458.  
  9459. acrossscrngourD:
  9460.  move.w d5,d3
  9461.  lsr.w #8,d3
  9462.  move.b d3,d6
  9463.  move.w d0,d3
  9464.  ifeq CHEESEY
  9465.  move.b (a0,d6.w*4),d3
  9466.  endc
  9467.  ifne CHEESEY
  9468.  move.b (a0,d6.w),d3
  9469.  endc
  9470.  add.w d1,d0
  9471.  add.l d2,d5
  9472.  and.l d4,d5
  9473.  move.l d5,d6
  9474.  swap d6
  9475.  move.w (a1,d3.w),(a3)+
  9476.  move.w d5,d3
  9477.  lsr.w #8,d3
  9478.  move.b d3,d6
  9479.  move.w d0,d3
  9480.  ifeq CHEESEY
  9481.  move.b (a0,d6.w*4),d3
  9482.  endc
  9483.  ifne CHEESEY
  9484.  move.b (a0,d6.w),d3
  9485.  endc
  9486.  add.w d1,d0
  9487.  add.l d2,d5
  9488.  and.l d4,d5
  9489.  move.l d5,d6
  9490.  swap d6
  9491.  move.w (a1,d3.w),(a3)+
  9492.  move.w d5,d3
  9493.  lsr.w #8,d3
  9494.  move.b d3,d6
  9495.  move.w d0,d3
  9496.  ifeq CHEESEY
  9497.  move.b (a0,d6.w*4),d3
  9498.  endc
  9499.  ifne CHEESEY
  9500.  move.b (a0,d6.w),d3
  9501.  endc
  9502.  add.w d1,d0
  9503.  add.l d2,d5
  9504.  and.l d4,d5
  9505.  move.l d5,d6
  9506.  swap d6
  9507.  move.w (a1,d3.w),(a3)+
  9508.  move.w d5,d3
  9509.  lsr.w #8,d3
  9510.  move.b d3,d6
  9511.  move.w d0,d3
  9512.  ifeq CHEESEY
  9513.  move.b (a0,d6.w*4),d3
  9514.  endc
  9515.  ifne CHEESEY
  9516.  move.b (a0,d6.w),d3
  9517.  endc
  9518.  add.w d1,d0
  9519.  add.l d2,d5
  9520.  and.l d4,d5
  9521.  move.l d5,d6
  9522.  swap d6
  9523.  move.w (a1,d3.w),(a3)+
  9524.  dbra d7,acrossscrngourD
  9525.  
  9526.  rts
  9527.  
  9528.  
  9529. ;backbeforegour:
  9530. ; and.w #63*256+63,d5
  9531. ; move.b (a0,d5.w*4),d0
  9532. ; add.l d1,d0
  9533. ; bcc.s .nomoreb
  9534. ; add.w #256,d0
  9535. ;.nomoreb:
  9536. ; add.w a4,d3
  9537. ; move.w (a1,d0.w*2),(a3)+
  9538. ; addx.l d6,d5
  9539. ; dbcs d7,acrossscrngour
  9540. ; dbcc d7,backbeforegour
  9541. ; rts
  9542. ; bra.s past1gour
  9543.  
  9544. ;acrossscrngour:
  9545. ; and.l #$3f3f,d5 
  9546. ; move.b (a0,d5.w*4),d0
  9547. ; add.l d1,d0
  9548. ; bcc.s .nomoreb
  9549. ; add.w #256,d0
  9550. ;.nomoreb:
  9551. ; add.w a4,d3
  9552. ; move.w (a1,d0.w*2),(a3)+
  9553. ; addx.l d2,d5
  9554. ; dbcs d7,acrossscrngour
  9555. ; dbcc d7,backbeforegour
  9556. ;past1gour:
  9557. ; rts
  9558.  
  9559.  move.w d4,d7
  9560.  bne.s .notdoneyet
  9561.  move.l d0,leftbright
  9562.  
  9563.  rts
  9564. .notdoneyet:
  9565.  
  9566.  cmp.w #32,d7
  9567.  ble.s .notoowide
  9568.  move.w #32,d7
  9569. .notoowide
  9570.  sub.w d7,d4  
  9571.  addq #4,a3
  9572.  
  9573. ; dbra d7,backbeforegour
  9574.  rts
  9575.  
  9576.  
  9577. gotoacrossgour:
  9578.  
  9579.  move.w d4,d7
  9580.  bne.s .notdoneyet
  9581.  rts
  9582. .notdoneyet:
  9583.  
  9584.  cmp.w #32,d7
  9585.  ble.s .notoowide
  9586.  move.w #32,d7
  9587. .notoowide
  9588.  sub.w d7,d4  
  9589.  addq #4,a3
  9590.  
  9591.  dbra d7,acrossscrngour
  9592.  rts
  9593.  
  9594.  
  9595. waterpt: dc.l waterlist
  9596.  
  9597. waterlist:
  9598.  dc.l waterfile
  9599.  dc.l waterfile+2
  9600.  dc.l waterfile+256
  9601.  dc.l waterfile+256+2
  9602.  dc.l waterfile+512
  9603.  dc.l waterfile+512+2
  9604.  dc.l waterfile+768
  9605.  dc.l waterfile+768+2
  9606. ; dc.l waterfile+768
  9607. ; dc.l waterfile+512+2
  9608. ; dc.l waterfile+512
  9609. ; dc.l waterfile+256+2
  9610. ; dc.l waterfile+256
  9611. ; dc.l waterfile+2
  9612. endwaterlist:
  9613.  
  9614. watertouse: dc.l waterfile
  9615.  
  9616. wtan: dc.w 0
  9617. wateroff: dc.l 0
  9618.  
  9619. REFLECTIONWATER:
  9620.  
  9621.  move.l d1,d4
  9622.  
  9623.  add.l wateroff,d5
  9624.  
  9625.  move.l #brightentab,a1
  9626.  move.l dst,d0
  9627.  clr.b d0
  9628.  
  9629.  add.w d0,d0
  9630.  cmp.w #12*512,d0
  9631.  blt.s .notoowater
  9632.  move.w #12*512,d0
  9633.  
  9634. .notoowater:
  9635.   
  9636.  adda.w d0,a1
  9637.  
  9638.  move.l dst,d0
  9639.  asl.w #7,d0
  9640.  add.w wtan,d0
  9641.  and.w #8191,d0
  9642.  move.l #SineTable,a0
  9643.  move.w (a0,d0.w),d0
  9644.  ext.l d0
  9645.  
  9646.  move.l dst,d3
  9647.  add.w #300,d3
  9648.  divs d3,d0
  9649.  asr.w #5,d0
  9650.  addq #4,d0
  9651.  cmp.w disttobot,d0
  9652.  blt.s oknotoffbotototr
  9653.  
  9654.  move.w disttobot,d0
  9655.  subq #1,d0
  9656.  
  9657. oknotoffbotototr
  9658.  
  9659. ; move.w dst,d3
  9660. ; asr.w #7,d3
  9661. ; add.w d3,d0
  9662.  
  9663.  muls #320,d0
  9664.  tst.w above
  9665.  beq.s nonnnnnegr
  9666.  neg.l d0
  9667.  
  9668. nonnnnnegr:
  9669.  
  9670.  move.l d0,a6
  9671.  
  9672.  move.l watertouse,a0
  9673.  
  9674. ; move.l #mixtab,a5
  9675.  
  9676.  moveq #0,d1
  9677.  
  9678.  move.w startsmoothx,d3
  9679.  dbra d7,acrossscrnwr
  9680.  rts
  9681.  
  9682. backbeforewr:
  9683.  and.w d1,d5 
  9684.  move.w (a0,d5.w*4),d0
  9685.  move.b (a3,a6.w),d0
  9686.  move.w (a1,d0.w),(a3)+
  9687.  add.w a4,d3
  9688.  addx.l d6,d5
  9689.  dbcs d7,acrossscrnwr
  9690.  dbcc d7,backbeforewr
  9691.  rts
  9692.  
  9693. acrossscrnwr:
  9694.  move.w d5,d3
  9695.  move.l d5,d6
  9696.  lsr.w #8,d3
  9697.  swap d6
  9698.  move.b d3,d6
  9699.  move.w (a0,d6.w*4),d0
  9700.  add.l d2,d5
  9701.  move.w (a4,a6.w),d1
  9702.  addq #2,a4
  9703.  move.b (a3,a6.w),d1
  9704.  move.b (a5,d1.l),d0
  9705.  and.l d4,d5
  9706.  move.w (a1,d0.w),(a3)+
  9707.  dbra d7,acrossscrnwr
  9708.  rts
  9709.  
  9710. texturedwater:
  9711.  
  9712.  move.l d1,d4
  9713.  
  9714.  add.l wateroff,d5
  9715.  
  9716.  move.l #brightentab,a1
  9717.  move.l dst,d0
  9718.  asr.l #1,d0
  9719.  clr.b d0
  9720.  
  9721.  add.w d0,d0
  9722.  cmp.w #9*512,d0
  9723.  blt.s .notoowater
  9724.  move.w #9*512,d0
  9725. .notoowater:
  9726.   
  9727.  adda.w d0,a1
  9728.  
  9729.  move.l dst,d0
  9730.  asl.w #7,d0
  9731.  add.w wtan,d0
  9732.  and.w #8191,d0
  9733.  move.l #SineTable,a0
  9734.  move.w (a0,d0.w),d0
  9735.  ext.l d0
  9736.  
  9737.  move.l dst,d3
  9738.  add.w #300,d3
  9739.  divs d3,d0
  9740.  asr.w #5,d0
  9741.  addq #4,d0
  9742.  cmp.w disttobot,d0
  9743.  blt.s oknotoffbototot
  9744.  
  9745.  move.w disttobot,d0
  9746.  subq #1,d0
  9747.  
  9748. oknotoffbototot
  9749.  
  9750. ; move.w dst,d3
  9751. ; asr.w #7,d3
  9752. ; add.w d3,d0
  9753.  
  9754.  tst.b DOUBLEHEIGHT
  9755.  beq.s .nodoub
  9756.  and.b #$fe,d0
  9757. .nodoub:
  9758.  
  9759.  muls #320,d0
  9760.  tst.w above
  9761.  beq.s nonnnnneg
  9762.  neg.l d0
  9763.  
  9764. nonnnnneg:
  9765.  
  9766.  move.l d0,a6
  9767.  
  9768.  move.l watertouse,a0
  9769.  
  9770.  move.w startsmoothx,d3
  9771.  dbra d7,acrossscrnw
  9772.  rts
  9773.  
  9774. backbeforew:
  9775.  and.w d1,d5
  9776.  move.w (a0,d5.w*4),d0
  9777.  move.b (a3,a6.w),d0
  9778.  move.b (a1,d0.w),(a3)+
  9779.  add.w a4,d3
  9780.  addx.l d6,d5
  9781.  dbcs d7,acrossscrnw
  9782.  dbcc d7,backbeforew
  9783.  rts
  9784.  
  9785. acrossscrnw:
  9786.  move.w d5,d3
  9787.  move.l d5,d6
  9788.  lsr.w #8,d3
  9789.  swap d6
  9790.  move.b d3,d6
  9791.  move.w (a0,d6.w*4),d0
  9792.  add.l d2,d5
  9793.  move.b (a3,a6.w),d0
  9794.  and.l d4,d5
  9795.  move.b (a1,d0.w),(a3)+
  9796.  dbra d7,acrossscrnw
  9797.  rts
  9798.  
  9799.  
  9800. texturedwaterDOUB:
  9801.  
  9802.  move.l d1,d4
  9803.  
  9804.  add.l wateroff,d5
  9805.  
  9806.  move.l #brightentab,a1
  9807.  move.l dst,d0
  9808.  asr.l #1,d0
  9809.  clr.b d0
  9810.  
  9811.  add.w d0,d0
  9812.  cmp.w #9*512,d0
  9813.  blt.s .notoowater
  9814.  move.w #9*512,d0
  9815. .notoowater:
  9816.   
  9817.  adda.w d0,a1
  9818.  
  9819.  move.l dst,d0
  9820.  asl.w #7,d0
  9821.  add.w wtan,d0
  9822.  and.w #8191,d0
  9823.  move.l #SineTable,a0
  9824.  move.w (a0,d0.w),d0
  9825.  ext.l d0
  9826.  
  9827.  move.l dst,d3
  9828.  add.w #300,d3
  9829.  divs d3,d0
  9830.  asr.w #5,d0
  9831.  addq #4,d0
  9832.  cmp.w disttobot,d0
  9833.  blt.s .oknotoffbototot
  9834.  
  9835.  move.w disttobot,d0
  9836.  subq #1,d0
  9837.  
  9838. .oknotoffbototot
  9839.  
  9840. ; move.w dst,d3
  9841. ; asr.w #7,d3
  9842. ; add.w d3,d0
  9843.  
  9844.  tst.b DOUBLEHEIGHT
  9845.  beq.s .nodoub
  9846.  and.b #$fe,d0
  9847. .nodoub:
  9848.  
  9849.  muls #320,d0
  9850.  tst.w above
  9851.  beq.s .nonnnnneg
  9852.  neg.l d0
  9853.  
  9854. .nonnnnneg:
  9855.  
  9856.  move.l d0,a6
  9857.  
  9858.  move.l watertouse,a0
  9859.  
  9860.  add.l d2,d2
  9861.  
  9862.  move.w startsmoothx,d3
  9863.  dbra d7,acrossscrnwD
  9864.  rts
  9865.  
  9866.  
  9867. acrossscrnwD:
  9868.  move.w d5,d3
  9869.  move.l d5,d6
  9870.  lsr.w #8,d3
  9871.  swap d6
  9872.  move.b d3,d6
  9873.  move.w (a0,d6.w*4),d0
  9874.  add.l d2,d5
  9875.  move.b (a3,a6.w),d0
  9876.  and.l d4,d5
  9877.  move.w (a1,d0.w),(a3)+
  9878.  dbra d7,acrossscrnwD
  9879.  rts
  9880.  
  9881.  
  9882. usewater: dc.w 0
  9883.  dc.w 0
  9884. startsmoothx: dc.w 0
  9885.  dc.w 0
  9886. startsmoothz: dc.w 0
  9887.  
  9888. ********************************
  9889. *
  9890.  include "AB3:source_4000/ObjDrawHIRES.s"
  9891. *
  9892. ********************************
  9893.  
  9894. numframes:
  9895.  dc.w 0
  9896.  
  9897. alframe: dc.l 0
  9898.  
  9899. alan:
  9900.  dcb.l 8,0
  9901.  dcb.l 8,1
  9902.  dcb.l 8,2
  9903.  dcb.l 8,3
  9904. endalan:
  9905.  
  9906. alanptr: dc.l alan
  9907.  
  9908. Time2: dc.l 0
  9909. dispco:
  9910.  dc.w 0
  9911.  
  9912.  
  9913. key_interrupt:
  9914.         movem.l    d0-d7/a0-a6,-(sp)
  9915.  
  9916. ;        move.w    INTREQR,d0
  9917. ;        btst    #3,d0
  9918. ;        beq    .not_key
  9919.  
  9920.         move.b    $bfdd00,d0
  9921.         btst    #0,d0
  9922.         bne    .key_cont
  9923. ;        move.b    $bfed01,d0
  9924. ;        btst    #0,d0
  9925. ;        bne    .key_cont
  9926.     
  9927. ;        btst    #3,d0
  9928. ;        beq    .key_cont
  9929.  
  9930.         move.b    $bfec01,d0
  9931.         clr.b    $bfec01
  9932.  
  9933.         tst.b    d0
  9934.         beq    .key_cont
  9935.  
  9936. ;        bset    #6,$bfee01
  9937. ;        move.b    #$f0,$bfe401
  9938. ;        move.b    #$00,$bfe501
  9939. ;        bset    #0,$bfee01
  9940.  
  9941.  
  9942.         not.b    d0
  9943.         ror.b    #1,d0
  9944.         lea.l    KeyMap,a0
  9945.         tst.b    d0
  9946.         bmi.b    .key_up
  9947.         and.w    #$7f,d0
  9948. ;        add.w    #1,d0
  9949.         move.b    #$ff,(a0,d0.w)
  9950.         move.b    d0,lastpressed
  9951.  
  9952.         bra.b    .key_cont2
  9953. .key_up:
  9954.         and.w    #$7f,d0
  9955. ;        add.w    #1,d0
  9956.         move.b    #$00,(a0,d0.w)
  9957.  
  9958. .key_cont2
  9959. ;        btst    #0,$bfed01
  9960. ;        beq    .key_cont2
  9961. ;        move.b    #%00000000,$bfee01
  9962. ;        move.b    #%10001000,$bfed01
  9963.  
  9964. ;alt keys should not be independent so overlay ralt on lalt
  9965.  
  9966.         
  9967. .key_cont
  9968.  
  9969. ;        move.w    #$0008,INTREQ
  9970. .not_key:    ;lea.l    $dff000,a5
  9971.  
  9972. ;        lea.l    _keypressed(pc),a0
  9973. ;        move.b    101(a0),d0    ;read LALT
  9974. ;        or.b    102(a0),d0    ;blend it with RALT
  9975. ;        move.b    d0,127(a0)    ;save in combined position
  9976.  
  9977.         movem.l    (sp)+,d0-d7/a0-a6
  9978.  
  9979.         rts
  9980.  
  9981. lastpressed:    dc.b 0
  9982. KInt_CCode    Ds.b    1
  9983. KInt_Askey    Ds.b    1
  9984. KInt_OCode    Ds.w    1
  9985.  
  9986.  
  9987. OldSpace: dc.b 0
  9988. SpaceTapped: dc.b 0
  9989. PLR1_SPCTAP: dc.b 0
  9990. PLR2_SPCTAP: dc.b 0
  9991. PLR1_Ducked: dc.b 0
  9992. PLR2_Ducked: dc.b 0
  9993.  even
  9994.  
  9995.  include "ab3:source_4000/PLR1CONTROL.s"
  9996.  include "ab3:source_4000/PLR2CONTROL.s"
  9997.  include "ab3:source_4000/FALL.s"
  9998.  
  9999. prot7: dc.w 0
  10000.  
  10001. GOTTOSEND: dc.w 0
  10002.  
  10003. OtherInter:
  10004.  move.w #$0010,$dff000+intreq
  10005.  movem.l d0-d7/a0-a6,-(a7)
  10006.  bra justshake
  10007.  
  10008.     cnop 0,4
  10009.  
  10010. Chan0inter:
  10011.  
  10012.     SAVEREGS
  10013.     jsr    .routine
  10014.     GETREGS
  10015.  
  10016. ;    move.w    #1024+'.',$dff030
  10017.     
  10018.     moveq #1,d0
  10019.     rts
  10020.  
  10021. .routine
  10022.  
  10023.     
  10024. ;w move.w #$0010,$dff000+intreq
  10025.  
  10026.  tst.b doanything
  10027.  bne dosomething
  10028.  
  10029.  movem.l d0-d7/a0-a6,-(a7)
  10030.  bra JUSTSOUNDS
  10031.  
  10032.  rts
  10033.  
  10034. tabheld: dc.w 0
  10035. ObjWork: ds.l 512
  10036. WORKPTR: dc.l 0
  10037. thistime: dc.w 0
  10038.  
  10039. DOALLANIMS:
  10040.  
  10041.  sub.b #1,thistime
  10042.  ble.s .okdosome
  10043.  rts
  10044.  
  10045. .okdosome:
  10046.  move.b #5,thistime
  10047.  
  10048.  
  10049.  move.l #ObjWork,a5
  10050.  move.l ObjectData,a0
  10051. Objectloop2:
  10052.  tst.w (a0)
  10053.  blt doneallobj2
  10054.  move.w 12(a0),d0
  10055.  blt doneobj2
  10056.  move.w d0,GraphicRoom(a0)
  10057.  tst.b worry(a0)
  10058.  beq.s doneobj2
  10059.  
  10060.  move.b 16(a0),d0
  10061.  cmp.b #1,d0
  10062.  blt JUMPALIENANIM
  10063.  beq JUMPOBJECTANIM
  10064. ; cmp.b #2,d0
  10065. ; beq JUMPBULLET
  10066.  
  10067. doneobj2:
  10068.  
  10069.  adda.w #64,a0
  10070.  addq #8,a5
  10071.  bra Objectloop2
  10072.  
  10073. doneallobj2:
  10074.  rts
  10075.  
  10076. JUMPALIENANIM:
  10077.  
  10078.  moveq #0,d0
  10079.  move.b WhichAnim(a0),d0
  10080. ; 0=walking
  10081. ; 1=attacking
  10082. ; 2=getting hit
  10083. ; 3=dying
  10084.  
  10085.  cmp.b #1,d0
  10086.  blt.s ALWALK
  10087.  beq.s ALATTACK
  10088.  
  10089.  cmp.b #3,d0
  10090.  blt ALGETHIT
  10091.  beq ALDIE
  10092.  
  10093.  bra doneobj2
  10094.  
  10095. ALDIE
  10096.  move.l #10,d0
  10097.  bra intowalk
  10098.  
  10099. ALGETHIT:
  10100.  move.l #9,d0
  10101.  bra intowalk
  10102.  
  10103. ALATTACK:
  10104.  move.l #8,d0
  10105.  bra intowalk
  10106.  
  10107. AUXOBJ: dc.w 0
  10108.  
  10109. ALWALK:
  10110.  
  10111.  jsr ViewpointToDraw
  10112.  add.l d0,d0
  10113.  
  10114.  move.l LINKFILE,a6
  10115.  add.l #AlienStats,a6
  10116.  moveq #0,d1
  10117.  move.b TypeOfThing(a0),d1
  10118.  muls #AlienStatLen,d1
  10119.  add.l d1,a6
  10120.  cmp.w #1,A_GFXType(a6)
  10121.  bne.s NOSIDES2
  10122.  
  10123.  moveq #0,d0
  10124. intowalk:
  10125.  
  10126. NOSIDES2:
  10127.  
  10128.  move.b d0,2(a5)
  10129.  move.l LINKFILE,a6
  10130.  
  10131.  add.l #AlienAnimData,a6
  10132.  
  10133.  moveq #0,d1
  10134.  move.b TypeOfThing(a0),d1
  10135.  muls #A_AnimLen,d1
  10136.  add.l d1,a6
  10137.  
  10138. ; move.l ANIMPOINTER,a6
  10139.  
  10140.  muls #A_OptLen,d0
  10141.  add.w d0,a6
  10142.  
  10143.  move.w SecTimer(a0),d1
  10144.  move.w d1,d2
  10145.  muls #A_FrameLen,d1
  10146.  
  10147.  moveq #0,d0
  10148.  move.b 5(a6,d1.w),d0
  10149.  beq.s .nosoundmake
  10150.  
  10151.  movem.l d0-d7/a0-a6,-(a7)
  10152.  subq #1,d0
  10153.  move.w d0,Samplenum
  10154.  clr.b notifplaying
  10155.  move.b 1(a0),IDNUM
  10156.  move.w #80,Noisevol
  10157.  move.l #ObjRotated,a1
  10158.  move.w (a0),d0
  10159.  lea (a1,d0.w*8),a1
  10160.  move.l (a1),Noisex
  10161.  jsr MakeSomeNoise
  10162.  movem.l (a7)+,d0-d7/a0-a6
  10163. .nosoundmake
  10164.  
  10165.  move.b 6(a6,d1.w),d0
  10166.  beq.s .noaction
  10167.  add.b #1,(a5)
  10168.  move.b d2,1(a5)
  10169. .noaction
  10170.  
  10171.  addq #1,d2
  10172.  
  10173.  moveq #0,d0
  10174.  move.b 7(a6,d1.w),d0
  10175.  beq.s .nospecial
  10176.  
  10177.  move.b d0,d3
  10178.  and.w #63,d3
  10179.  lsr.w #6,d0
  10180.  cmp.w #2,d0
  10181.  blt.s .storeval
  10182.  beq.s .randval
  10183.  
  10184.  sub.b #1,4(a5)
  10185.  beq.s .nospecial
  10186.  
  10187.  move.w d3,d2
  10188.  bra.s .nospecial
  10189.  
  10190. .randval:
  10191.  jsr GetRand
  10192.  divs d3,d0
  10193.  swap d0
  10194.  move.w d0,d3
  10195.  
  10196. .storeval:
  10197.  move.b d3,4(a5)
  10198. .nospecial:
  10199.  
  10200.  move.w d2,d3
  10201.  muls #A_FrameLen,d3
  10202.  tst.b (a6,d3.w)
  10203.  bge.s .noendanim
  10204.  st 3(a5)
  10205.  move.w #0,d2
  10206. .noendanim
  10207.  move.w d2,SecTimer(a0)
  10208.  
  10209.  bra doneobj2
  10210.  
  10211.  
  10212. JUMPOBJECTANIM:
  10213.  bra doneobj2
  10214.  
  10215. timetodamage: dc.w 0
  10216. SAVESAVE: dc.w 0
  10217.  
  10218. dosomething:
  10219.  
  10220.  
  10221.  
  10222.  addq.w #1,FramesToDraw
  10223.  movem.l d0-d7/a0-a6,-(a7)
  10224.  
  10225.  jsr NARRATOR
  10226.  
  10227.  bsr DOALLANIMS
  10228.  
  10229.  sub.w #1,timetodamage
  10230.  bgt.s .nodam
  10231.  
  10232.  move.w #100,timetodamage
  10233.  
  10234.  move.l PLR1_Roompt,a0
  10235.  move.w ToFloorNoise(a0),d0
  10236.  tst.b PLR1_StoodInTop
  10237.  beq.s .okinbot
  10238.  move.w ToUpperFloorNoise(a0),d0
  10239. .okinbot:
  10240.  
  10241.  move.l LINKFILE,a0
  10242.  add.l #FloorData,a0
  10243.  move.w (a0,d0.w*4),d0    ; damage. 
  10244.  move.l PLR1_Obj,a0
  10245.  add.b d0,damagetaken(a0)
  10246.  
  10247.  move.l PLR2_Roompt,a0
  10248.  move.w ToFloorNoise(a0),d0
  10249.  tst.b PLR2_StoodInTop
  10250.  beq.s .okinbot2
  10251.  move.w ToUpperFloorNoise(a0),d0
  10252. .okinbot2:
  10253.  
  10254.  move.l LINKFILE,a0
  10255.  add.l #FloorData,a0
  10256.  move.w (a0,d0.w*4),d0    ; damage. 
  10257.  
  10258.  move.l PLR2_Obj,a0
  10259.  add.b d0,damagetaken(a0)
  10260.  
  10261. .nodam:
  10262.  
  10263.  move.l #KeyMap,a5
  10264.  
  10265.  tst.b $42(a5)
  10266.  bne.s .tabprsd
  10267.  clr.b tabheld
  10268.  bra.s .noswitch
  10269.  
  10270. .tabprsd:
  10271.  tst.b tabheld
  10272.  bne.s .noswitch
  10273.  not.b MAPON
  10274.  st tabheld
  10275. .noswitch
  10276.  
  10277.  tst.b $3e(a5)
  10278.  sne d0
  10279.  tst.b $1e(a5)
  10280.  sne d1
  10281.  tst.b $2d(a5)
  10282.  sne d2
  10283.  tst.b $2f(a5)
  10284.  sne d3
  10285.  
  10286.  tst.b $3d(a5)
  10287.  sne d4
  10288.  tst.b $3f(a5)
  10289.  sne d5
  10290.  tst.b $1d(a5)
  10291.  sne d6
  10292.  tst.b $1f(a5)
  10293.  sne d7
  10294.  
  10295.  or.b d4,d0
  10296.  or.b d5,d0
  10297.  or.b d6,d1
  10298.  or.b d7,d1
  10299.  or.b d4,d2
  10300.  or.b d6,d2
  10301.  or.b d7,d3
  10302.  or.b d5,d3
  10303.  
  10304.  move.w MAPBRIGHT,d4
  10305.  add.w #2,d4
  10306.  clr.l d5
  10307.  bset d4,d5
  10308.  
  10309.  tst.b d0
  10310.  beq.s .nomapup
  10311.  sub.w d5,mapzoff
  10312. .nomapup 
  10313.  
  10314.  tst.b d1
  10315.  beq.s .nomapdown
  10316.  add.w d5,mapzoff
  10317. .nomapdown 
  10318.  
  10319.  tst.b d2
  10320.  beq.s .nomapleft
  10321.  add.w d5,mapxoff
  10322. .nomapleft 
  10323.  
  10324.  tst.b d3
  10325.  beq.s .nomapright
  10326.  sub.w d5,mapxoff
  10327. .nomapright 
  10328.  
  10329.  tst.b $2e(a5)
  10330.  beq.s .nomapcentre
  10331.  
  10332.  move.w #0,mapxoff
  10333.  move.w #0,mapzoff
  10334.  
  10335. .nomapcentre
  10336.  
  10337. ; move.w STOPOFFSET,d0
  10338. ; tst.b 27(a5)
  10339. ; beq.s .nolookup
  10340. ; sub.w #5,d0
  10341. ; cmp.w #-80,d0
  10342. ; bgt.s .nolookup
  10343. ; move.w #-80,d0
  10344. ;.nolookup:
  10345. ; tst.b 42(a5)
  10346. ; beq.s .nolookdown
  10347. ; add.w #5,d0
  10348. ; cmp.w #80,d0
  10349. ; blt.s .nolookdown
  10350. ; move.w #80,d0
  10351. ;.nolookdown:
  10352. ;
  10353. ; move.w d0,STOPOFFSET
  10354. ; neg.w d0
  10355. ; add.w #120,d0
  10356. ; move.w d0,SMIDDLEY
  10357. ; muls #320*2,d0
  10358. ; move.l d0,SBIGMIDDLEY
  10359.  
  10360.  
  10361. ; jsr INITREC
  10362. ; jsr RECEIVE
  10363.  
  10364. ; tst.l BUFFER
  10365. ; beq.s justshake
  10366. ; st GOTTOSEND
  10367. ; move.l #OtherInter,$6c
  10368.  
  10369. justshake:
  10370.  
  10371.  cmp.b #'b',Prefsfile+3
  10372.  bne.s .noback
  10373.  jsr mt_music
  10374. .noback:
  10375.  
  10376.  bra dontshowtime
  10377.  
  10378.  tst.b oktodisplay
  10379.  beq dontshowtime
  10380.  clr.b oktodisplay
  10381.  subq.w #1,dispco
  10382.  bgt dontshowtime
  10383.  move.w #10,dispco
  10384.  
  10385.  move.l #TimerScr+10,a0
  10386.  move.l TimeCount,d0
  10387.  bge.s timenotneg
  10388.  move.l #1111*256,d0
  10389. timenotneg:
  10390.  asr.l #8,d0
  10391.  move.l #digits,a1
  10392.  move.w #7,d2
  10393. digitlop
  10394.  divs #10,d0
  10395.  swap d0
  10396.  lea (a1,d0.w*8),a2
  10397.  move.b (a2)+,(a0)
  10398.  move.b (a2)+,24(a0)
  10399.  move.b (a2)+,24*2(a0)
  10400.  move.b (a2)+,24*3(a0)
  10401.  move.b (a2)+,24*4(a0)
  10402.  move.b (a2)+,24*5(a0)
  10403.  move.b (a2)+,24*6(a0)
  10404.  move.b (a2)+,24*7(a0)
  10405.  subq #1,a0
  10406.  swap d0
  10407.  ext.l d0
  10408.  dbra d2,digitlop
  10409.  
  10410.  move.l #TimerScr+10+24*10,a0
  10411.  move.l NumTimes,d0
  10412.  move.l #digits,a1
  10413.  move.w #3,d2
  10414. digitlop2
  10415.  divs #10,d0
  10416.  swap d0
  10417.  lea (a1,d0.w*8),a2
  10418.  move.b (a2)+,(a0)
  10419.  move.b (a2)+,24(a0)
  10420.  move.b (a2)+,24*2(a0)
  10421.  move.b (a2)+,24*3(a0)
  10422.  move.b (a2)+,24*4(a0)
  10423.  move.b (a2)+,24*5(a0)
  10424.  move.b (a2)+,24*6(a0)
  10425.  move.b (a2)+,24*7(a0)
  10426.  subq #1,a0
  10427.  swap d0
  10428.  ext.l d0
  10429.  dbra d2,digitlop2
  10430.  
  10431.  move.l #TimerScr+10+24*20,a0
  10432.  moveq #0,d0
  10433.  move.w FramesToDraw,d0
  10434.  move.l #digits,a1
  10435.  move.w #2,d2
  10436. digitlop3
  10437.  divs #10,d0
  10438.  swap d0
  10439.  lea (a1,d0.w*8),a2
  10440.  move.b (a2)+,(a0)
  10441.  move.b (a2)+,24(a0)
  10442.  move.b (a2)+,24*2(a0)
  10443.  move.b (a2)+,24*3(a0)
  10444.  move.b (a2)+,24*4(a0)
  10445.  move.b (a2)+,24*5(a0)
  10446.  move.b (a2)+,24*6(a0)
  10447.  move.b (a2)+,24*7(a0)
  10448.  subq #1,a0
  10449.  swap d0
  10450.  ext.l d0
  10451.  dbra d2,digitlop3
  10452.  
  10453. dontshowtime:
  10454.  
  10455.  
  10456.  move.l alanptr,a0
  10457.  move.l (a0)+,alframe
  10458.  cmp.l #endalan,a0
  10459.  blt.s nostartalan
  10460.  move.l #alan,a0
  10461. nostartalan:
  10462.  move.l a0,alanptr
  10463.  
  10464.  
  10465.  tst.b READCONTROLS
  10466.  beq nocontrols
  10467.  
  10468.  cmp.b #'s',mors
  10469.  beq control2
  10470.  
  10471.  tst.w PLAYERONEHEALTH
  10472.  bgt .propercontrol
  10473.  
  10474.  move.l #7*2116,hitcol
  10475.  move.l #PLR1_Obj,a0
  10476.  move.w #-1,12+128(a0)
  10477.  
  10478.  clr.b PLR1_fire
  10479.  clr.b PLR1_clicked
  10480.  move.w #0,ADDTOBOBBLE
  10481.  move.l #playercrouched,PLR1s_height
  10482.  move.w #-80,d0
  10483.  move.w d0,STOPOFFSET
  10484.  neg.w d0
  10485.  add.w TOTHEMIDDLE,d0
  10486.  move.w d0,SMIDDLEY
  10487.  muls #320,d0
  10488.  move.l d0,SBIGMIDDLEY
  10489.  jsr PLR1_fall
  10490.  
  10491.  move.l PLR1s_xspdval,d6
  10492.  move.l PLR1s_zspdval,d7
  10493.  
  10494.  tst.b SLOWDOWN
  10495.  beq.s .nofriction
  10496.  
  10497.  neg.l d6
  10498.  ble.s .nobug1
  10499.  asr.l #3,d6
  10500.  add.l #1,d6
  10501.  bra.s .bug1
  10502. .nobug1
  10503.  asr.l #3,d6
  10504. .bug1:
  10505.  
  10506.  neg.l d7
  10507.  ble.s .nobug2
  10508.  asr.l #3,d7
  10509.  add.l #1,d7
  10510.  bra.s .bug2
  10511. .nobug2
  10512.  asr.l #3,d7
  10513. .bug2: 
  10514.  
  10515.  add.l d6,PLR1s_xspdval
  10516.  add.l d7,PLR1s_zspdval
  10517.  
  10518. .nofriction:
  10519.  move.l PLR1s_xspdval,d6
  10520.  move.l PLR1s_zspdval,d7
  10521.  add.l d6,PLR1s_xoff
  10522.  add.l d7,PLR1s_zoff
  10523.  
  10524.  move.w PLR1s_angspd,d3
  10525.  tst.b SLOWDOWN
  10526.  beq.s .nofric
  10527.  asr.w #2,d3
  10528.  bge.s .nneg
  10529.  addq #1,d3
  10530. .nneg:
  10531. .nofric:
  10532.  
  10533.  move.w d3,PLR1s_angspd
  10534.  add.w d3,PLR1s_angpos
  10535.  add.w d3,PLR1s_angpos
  10536.  and.w #8190,PLR1s_angpos
  10537.  
  10538.  bra nocontrols
  10539.  
  10540. .propercontrol:
  10541.  
  10542.  tst.b PLR1MOUSE
  10543.  beq.s PLR1_nomouse
  10544.  bsr PLR1_mouse_control
  10545. PLR1_nomouse:
  10546.  tst.b PLR1KEYS
  10547.  beq.s PLR1_nokeys
  10548.  bsr PLR1_keyboard_control
  10549. PLR1_nokeys:
  10550. ; tst.b PLR1PATH
  10551. ; beq.s PLR1_nopath
  10552. ; bsr PLR1_follow_path
  10553. ;PLR1_nopath:
  10554.  tst.b PLR1JOY
  10555.  beq.s PLR1_nojoy
  10556.  bsr PLR1_JoyStick_control
  10557. PLR1_nojoy: 
  10558.  bra nocontrols
  10559.  
  10560. control2:
  10561.  
  10562.  tst.w PLAYERTWOHEALTH
  10563.  bgt .propercontrol
  10564.  
  10565.  move.l #7*2116,hitcol
  10566.  move.l #PLR1_Obj,a0
  10567.  move.w #-1,12+128(a0)
  10568.  clr.b PLR2_fire
  10569.  move.w #0,ADDTOBOBBLE
  10570.  move.l #playercrouched,PLR2s_height
  10571.  move.w #-80,d0
  10572.  move.w d0,STOPOFFSET
  10573.  neg.w d0
  10574.  add.w TOTHEMIDDLE,d0
  10575.  move.w d0,SMIDDLEY
  10576.  muls #320,d0
  10577.  move.l d0,SBIGMIDDLEY
  10578.  jsr PLR2_fall
  10579.  
  10580.  move.l PLR2s_xspdval,d6
  10581.  move.l PLR2s_zspdval,d7
  10582.  
  10583.  tst.b SLOWDOWN
  10584.  beq.s .nofriction
  10585.  
  10586.  neg.l d6
  10587.  ble.s .nobug1
  10588.  asr.l #3,d6
  10589.  add.l #1,d6
  10590.  bra.s .bug1
  10591. .nobug1
  10592.  asr.l #3,d6
  10593. .bug1:
  10594.  
  10595.  neg.l d7
  10596.  ble.s .nobug2
  10597.  asr.l #3,d7
  10598.  add.l #1,d7
  10599.  bra.s .bug2
  10600. .nobug2
  10601.  asr.l #3,d7
  10602. .bug2: 
  10603.  
  10604.  add.l d6,PLR2s_xspdval
  10605.  add.l d7,PLR2s_zspdval
  10606.  
  10607. .nofriction:
  10608.  move.l PLR2s_xspdval,d6
  10609.  move.l PLR2s_zspdval,d7
  10610.  add.l d6,PLR2s_xoff
  10611.  add.l d7,PLR2s_zoff
  10612.  
  10613.  move.w PLR2s_angspd,d3
  10614.  tst.b SLOWDOWN
  10615.  beq.s .nofric
  10616.  asr.w #2,d3
  10617.  bge.s .nneg
  10618.  addq #1,d3
  10619. .nneg:
  10620. .nofric:
  10621.  
  10622.  move.w d3,PLR2s_angspd
  10623.  add.w d3,PLR2s_angpos
  10624.  add.w d3,PLR2s_angpos
  10625.  and.w #8190,PLR2s_angpos
  10626.  
  10627.  bra.s nocontrols
  10628.  
  10629. .propercontrol:
  10630.  tst.b PLR2MOUSE
  10631.  beq.s PLR2_nomouse
  10632.  bsr PLR2_mouse_control
  10633. PLR2_nomouse:
  10634.  tst.b PLR2KEYS
  10635.  beq.s PLR2_nokeys
  10636.  bsr PLR2_keyboard_control
  10637. PLR2_nokeys:
  10638. ; tst.b PLR2PATH
  10639. ; beq.s PLR2_nopath
  10640. ; bsr PLR1_follow_path
  10641. ;PLR2_nopath:
  10642.  tst.b PLR2JOY
  10643.  beq.s PLR2_nojoy
  10644.  bsr PLR2_JoyStick_control
  10645. PLR2_nojoy: 
  10646.  
  10647.  
  10648. nocontrols:
  10649.  
  10650.  move.l #$dff000,a6
  10651.  
  10652.  cmp.b #'4',Prefsfile+1
  10653.  bne.s nomuckabout
  10654.  
  10655.  move.w #$0,d0 
  10656.  tst.b NoiseMade0LEFT
  10657.  beq.s noturnoff0
  10658.  move.w #1,d0
  10659. noturnoff0:
  10660.  tst.b NoiseMade0RIGHT
  10661.  beq.s noturnoff1
  10662.  or.w #2,d0
  10663. noturnoff1:
  10664.  tst.b NoiseMade1RIGHT
  10665.  beq.s noturnoff2
  10666.  or.w #4,d0
  10667. noturnoff2:
  10668.  tst.b NoiseMade1LEFT
  10669.  beq.s noturnoff3
  10670.  or.w #8,d0
  10671. noturnoff3:
  10672.     move.w d0,dmacon(a6)
  10673.  
  10674. nomuckabout:
  10675.  
  10676.  
  10677. ; tst.b PLR2_fire
  10678. ; beq.s firenotpressed2
  10679. ; fire was pressed last time.
  10680. ; btst #7,$bfe001
  10681. ; bne.s firenownotpressed2
  10682. ; fire is still pressed this time.
  10683. ; st PLR2_fire
  10684. ; bra dointer
  10685.  
  10686. firenownotpressed2:
  10687. ; fire has been released.
  10688. ; clr.b PLR2_fire
  10689. ; bra dointer
  10690.  
  10691. firenotpressed2
  10692.  
  10693. ; fire was not pressed last frame...
  10694.  
  10695. ; btst #7,$bfe001
  10696. ; if it has still not been pressed, go back above
  10697. ; bne.s firenownotpressed2
  10698. ; fire was not pressed last time, and was this time, so has
  10699. ; been clicked.
  10700. ; st PLR2_clicked
  10701. ; st PLR2_fire
  10702.  
  10703. dointer
  10704.  
  10705. JUSTSOUNDS:
  10706.  
  10707.  tst.b dosounds
  10708.  beq.s .notthing
  10709.  
  10710.  cmp.b #'4',Prefsfile+1
  10711.     beq fourchannel
  10712.  
  10713.  btst #1,$dff000+intreqr
  10714.     bne.s newsampbitl
  10715.  
  10716. .notthing:
  10717.  
  10718.  movem.l (a7)+,d0-d7/a0-a6
  10719.  
  10720.  moveq #0,d0
  10721.  rts
  10722.  
  10723.  
  10724. dosounds: dc.w 0
  10725.  
  10726. swappedem: dc.w 0
  10727.  
  10728. newsampbitl:
  10729.  
  10730.  move.w #$820f,$dff000+dmacon
  10731.  
  10732.  move.w #$200,$dff000+intreq
  10733.  
  10734. ; tst.b CHANNELDATA
  10735. ; bne nochannel0
  10736.  
  10737.  move.l pos0LEFT,a0
  10738.  move.l pos2LEFT,a1
  10739.  
  10740.  move.l #tab,a2
  10741.  
  10742.  moveq #0,d0
  10743.  moveq #0,d1
  10744.  move.b vol0left,d0
  10745.  move.b vol2left,d1
  10746.  cmp.b d1,d0
  10747.  slt swappedem
  10748.  bge.s fbig0
  10749.  
  10750. ; d1 is bigger so scale d0 and use d1
  10751. ; as audiochannel volume.
  10752.  
  10753.  exg a0,a1
  10754.  asl.w #6,d0
  10755.  divs d1,d0
  10756.  lsl.w #8,d0
  10757.  adda.w d0,a2
  10758.  move.w d1,$dff0a8
  10759.  bra.s donechan0
  10760.  
  10761. fbig0:
  10762.  tst.w d0
  10763.  beq.s donechan0
  10764.  asl.w #6,d1
  10765.  divs d0,d1
  10766.  lsl.w #8,d1
  10767.  adda.w d1,a2
  10768.  move.w d0,$dff0a8
  10769.  
  10770. donechan0:
  10771.  
  10772.  move.l Aupt0,a3
  10773.  move.l a3,$dff0a0
  10774.  move.l Auback0,Aupt0
  10775.  move.l a3,Auback0
  10776.  
  10777.  move.l Auback0,a3
  10778.  
  10779.  moveq #0,d0
  10780.  moveq #0,d1
  10781.  moveq #0,d2
  10782.  moveq #0,d3
  10783.  moveq #0,d4
  10784.  moveq #0,d5
  10785.  move.w #49,d7
  10786. loop:
  10787.  move.l (a0)+,d0
  10788.  move.b (a1)+,d1
  10789.  move.b (a1)+,d2
  10790.  move.b (a1)+,d3
  10791.  move.b (a1)+,d4
  10792.  move.b (a2,d3.w),d5
  10793.  swap d5
  10794.  move.b (a2,d1.w),d5
  10795.  asl.l #8,d5
  10796.  move.b (a2,d2.w),d5
  10797.  swap d5
  10798.  move.b (a2,d4.w),d5
  10799.  add.l d5,d0
  10800.  move.l d0,(a3)+
  10801.  dbra d7,loop
  10802.  
  10803.  tst.b swappedem
  10804.  beq.s .ok23
  10805.  exg a0,a1
  10806. .ok23:
  10807.  
  10808.  cmp.l Samp0endLEFT,a0
  10809.  blt.s .notoffendsamp1
  10810.  move.l #empty,a0
  10811.  move.l #emptyend,Samp0endLEFT
  10812.  move.b #0,vol0left
  10813.  st LEFTCHANDATA+1
  10814.  move.w #0,LEFTCHANDATA+2
  10815. .notoffendsamp1:
  10816.  
  10817.  cmp.l Samp2endLEFT,a1
  10818.  blt.s .notoffendsamp2
  10819.  move.l #empty,a1
  10820.  move.l #emptyend,Samp2endLEFT
  10821.  move.b #0,vol2left
  10822.  st LEFTCHANDATA+1+8
  10823.  move.w #0,LEFTCHANDATA+2+8
  10824. .notoffendsamp2:
  10825.  
  10826.  move.l a0,pos0LEFT
  10827.  move.l a1,pos2LEFT
  10828.  
  10829. nochannel0:
  10830.  
  10831.  tst.b CHANNELDATA+16
  10832.  bne nochannel1
  10833.  
  10834.  
  10835.  move.l pos0RIGHT,a0
  10836.  move.l pos2RIGHT,a1
  10837.  
  10838.  move.l Aupt1,a3
  10839.  move.l a3,$dff0b0
  10840.  move.l Auback1,Aupt1
  10841.  move.l a3,Auback1
  10842.  
  10843.  move.l #tab,a2
  10844.  
  10845.  moveq #0,d0
  10846.  moveq #0,d1
  10847.  move.b vol0right,d0
  10848.  move.b vol2right,d1
  10849.  cmp.b d1,d0
  10850.  slt swappedem
  10851.  bge.s fbig1
  10852.  
  10853. ; d1 is bigger so scale d0 and use d1
  10854. ; as audiochannel volume.
  10855.  
  10856.  exg a0,a1
  10857.  asl.w #6,d0
  10858.  divs d1,d0
  10859.  lsl.w #8,d0
  10860.  adda.w d0,a2
  10861.  move.w d1,$dff0b8
  10862.  bra.s donechan1
  10863.  
  10864. fbig1:
  10865.  tst.w d0
  10866.  beq.s donechan1
  10867.  asl.w #6,d1
  10868.  divs d0,d1
  10869.  lsl.w #8,d1
  10870.  adda.w d1,a2
  10871.  move.w d0,$dff0b8
  10872.  
  10873. donechan1:
  10874.  moveq #0,d0
  10875.  moveq #0,d1
  10876.  moveq #0,d2
  10877.  moveq #0,d3
  10878.  moveq #0,d4
  10879.  moveq #0,d5
  10880.  move.w #49,d7
  10881. loop2:
  10882.  move.l (a0)+,d0
  10883.  move.b (a1)+,d1
  10884.  move.b (a1)+,d2
  10885.  move.b (a1)+,d3
  10886.  move.b (a1)+,d4
  10887.  move.b (a2,d3.w),d5
  10888.  swap d5
  10889.  move.b (a2,d1.w),d5
  10890.  asl.l #8,d5
  10891.  move.b (a2,d2.w),d5
  10892.  swap d5
  10893.  move.b (a2,d4.w),d5
  10894.  add.l d5,d0
  10895.  move.l d0,(a3)+
  10896.  dbra d7,loop2
  10897.  
  10898.  tst.b swappedem
  10899.  beq.s ok01
  10900.  exg a0,a1
  10901. ok01:
  10902.  
  10903.  cmp.l Samp0endRIGHT,a0
  10904.  blt.s .notoffendsamp1
  10905.  move.l #empty,a0
  10906.  move.l #emptyend,Samp0endRIGHT
  10907.  move.b #0,vol0right
  10908.  st RIGHTCHANDATA+1
  10909.  move.w #0,RIGHTCHANDATA+2
  10910. .notoffendsamp1:
  10911.  
  10912.  cmp.l Samp2endRIGHT,a1
  10913.  blt.s .notoffendsamp2
  10914.  move.l #empty,a1
  10915.  move.l #emptyend,Samp2endRIGHT
  10916.  move.b #0,vol2right
  10917.  st RIGHTCHANDATA+1+8
  10918.  move.w #0,RIGHTCHANDATA+2+8
  10919. .notoffendsamp2:
  10920.  
  10921.  move.l a0,pos0RIGHT
  10922.  move.l a1,pos2RIGHT
  10923.  
  10924. nochannel1:
  10925.  
  10926. ******************* Other two channels
  10927.  
  10928.  move.l pos1LEFT,a0
  10929.  move.l pos3LEFT,a1
  10930.  
  10931.  move.l #tab,a2
  10932.  
  10933.  moveq #0,d0
  10934.  moveq #0,d1
  10935.  move.b vol1left,d0
  10936.  move.b vol3left,d1
  10937.  cmp.b d1,d0
  10938.  slt swappedem
  10939.  bge.s fbig2
  10940.  
  10941. ; d1 is bigger so scale d0 and use d1
  10942. ; as audiochannel volume.
  10943.  
  10944.  exg a0,a1
  10945.  asl.w #6,d0
  10946.  divs d1,d0
  10947.  lsl.w #8,d0
  10948.  adda.w d0,a2
  10949.  move.w d1,$dff0d8
  10950.  bra.s donechan2
  10951.  
  10952. fbig2:
  10953.  tst.w d0
  10954.  beq.s donechan2
  10955.  asl.w #6,d1
  10956.  divs d0,d1
  10957.  lsl.w #8,d1
  10958.  adda.w d1,a2
  10959.  move.w d0,$dff0d8
  10960.  
  10961. donechan2:
  10962.  
  10963.  move.l Aupt2,a3
  10964.  move.l a3,$dff0d0
  10965.  move.l Auback2,Aupt2
  10966.  move.l a3,Auback2
  10967.  
  10968.  moveq #0,d0
  10969.  moveq #0,d1
  10970.  moveq #0,d2
  10971.  moveq #0,d3
  10972.  moveq #0,d4
  10973.  moveq #0,d5
  10974.  move.w #49,d7
  10975. loop3:
  10976.  move.l (a0)+,d0
  10977.  move.b (a1)+,d1
  10978.  move.b (a1)+,d2
  10979.  move.b (a1)+,d3
  10980.  move.b (a1)+,d4
  10981.  move.b (a2,d3.w),d5
  10982.  swap d5
  10983.  move.b (a2,d1.w),d5
  10984.  asl.l #8,d5
  10985.  move.b (a2,d2.w),d5
  10986.  swap d5
  10987.  move.b (a2,d4.w),d5
  10988.  add.l d5,d0
  10989.  move.l d0,(a3)+
  10990.  dbra d7,loop3
  10991.  
  10992.  tst.b swappedem
  10993.  beq.s .ok23
  10994.  exg a0,a1
  10995. .ok23:
  10996.  
  10997.  cmp.l Samp1endLEFT,a0
  10998.  blt.s .notoffendsamp3
  10999.  move.l #empty,a0
  11000.  move.l #emptyend,Samp1endLEFT
  11001.  move.b #0,vol1left
  11002.  st LEFTCHANDATA+1+4
  11003.  move.w #0,LEFTCHANDATA+2+4
  11004. .notoffendsamp3:
  11005.  
  11006.  cmp.l Samp3endLEFT,a1
  11007.  blt.s .notoffendsamp4
  11008.  move.l #empty,a1
  11009.  move.l #emptyend,Samp3endLEFT
  11010.  move.b #0,vol3left
  11011.  st LEFTCHANDATA+1+12
  11012.  move.w #0,LEFTCHANDATA+2+12
  11013. .notoffendsamp4:
  11014.  
  11015.  move.l a0,pos1LEFT
  11016.  move.l a1,pos3LEFT
  11017.  
  11018.  move.l pos1RIGHT,a0
  11019.  move.l pos3RIGHT,a1
  11020.  
  11021.  move.l Aupt3,a3
  11022.  move.l a3,$dff0c0
  11023.  move.l Auback3,Aupt3
  11024.  move.l a3,Auback3
  11025.  
  11026.  move.l #tab,a2
  11027.  
  11028.  moveq #0,d0
  11029.  moveq #0,d1
  11030.  move.b vol1right,d0
  11031.  move.b vol3right,d1
  11032.  cmp.b d1,d0
  11033.  slt.s swappedem
  11034.  bge.s fbig3
  11035.  
  11036.  exg a0,a1
  11037.  asl.w #6,d0
  11038.  divs d1,d0
  11039.  lsl.w #8,d0
  11040.  adda.w d0,a2
  11041.  move.w d1,$dff0c8
  11042.  bra.s donechan3
  11043.  
  11044. fbig3:
  11045.  tst.w d0
  11046.  beq.s donechan3
  11047.  asl.w #6,d1
  11048.  divs d0,d1
  11049.  lsl.w #8,d1
  11050.  adda.w d1,a2
  11051.  move.w d0,$dff0c8
  11052. donechan3:
  11053.  
  11054.  moveq #0,d0
  11055.  moveq #0,d1
  11056.  moveq #0,d2
  11057.  moveq #0,d3
  11058.  moveq #0,d4
  11059.  moveq #0,d5
  11060.  move.w #49,d7
  11061. loop4:
  11062.  move.l (a0)+,d0
  11063.  move.b (a1)+,d1
  11064.  move.b (a1)+,d2
  11065.  move.b (a1)+,d3
  11066.  move.b (a1)+,d4
  11067.  move.b (a2,d3.w),d5
  11068.  swap d5
  11069.  move.b (a2,d1.w),d5
  11070.  asl.l #8,d5
  11071.  move.b (a2,d2.w),d5
  11072.  swap d5
  11073.  move.b (a2,d4.w),d5
  11074.  add.l d5,d0
  11075.  move.l d0,(a3)+
  11076.  dbra d7,loop4
  11077.  
  11078.  tst.b swappedem
  11079.  beq.s .ok23
  11080.  exg a0,a1
  11081. .ok23:
  11082.  
  11083.  cmp.l Samp1endRIGHT,a0
  11084.  blt.s notoffendsamp3
  11085.  move.l #empty,a0
  11086.  move.l #emptyend,Samp1endRIGHT
  11087.  move.b #0,vol1right
  11088.  st RIGHTCHANDATA+1+4
  11089.  move.w #0,RIGHTCHANDATA+2+4
  11090. notoffendsamp3:
  11091.  
  11092.  cmp.l Samp3endRIGHT,a1
  11093.  blt.s notoffendsamp4
  11094.  move.l #empty,a1
  11095.  move.l #emptyend,Samp3endRIGHT
  11096.  move.b #0,vol3right
  11097.  st RIGHTCHANDATA+1+12
  11098.  move.w #0,RIGHTCHANDATA+2+12
  11099. notoffendsamp4:
  11100.  
  11101.  move.l a0,pos1RIGHT
  11102.  move.l a1,pos3RIGHT
  11103.  
  11104.  movem.l (a7)+,d0-d7/a0-a6
  11105.  tst.b counting
  11106.  beq .nostartcounter
  11107.  JSR STARTCOUNT
  11108. .nostartcounter:
  11109.  
  11110.  moveq #0,d0
  11111.  rts
  11112.  
  11113. ***********************************
  11114. * 4 channel sound routine
  11115. ***********************************
  11116.  
  11117. fourchannel:
  11118.  
  11119.  move.l #$dff000,a6
  11120.  
  11121.  btst #7,intreqrl(a6)
  11122.  beq.s nofinish0
  11123. ; move.w #0,LEFTCHANDATA+2
  11124. ; st LEFTCHANDATA+1
  11125.  move.l #null,$a0(a6)
  11126.  move.w #100,$a4(a6) 
  11127.  move.w #$0080,intreq(a6)
  11128. nofinish0:
  11129.  
  11130.  tst.b NoiseMade0pLEFT
  11131.  beq.s NoChan0sound
  11132.  
  11133.  move.l Samp0endLEFT,d0
  11134.  move.l pos0LEFT,d1
  11135.  sub.l d1,d0
  11136.  lsr.l #1,d0
  11137.  move.w d0,$a4(a6)
  11138.  move.l d1,$a0(a6)
  11139.  ext.l d0
  11140.  divs #100,d0
  11141.  move.w d0,playnull0
  11142.  move.w #$8201,dmacon(a6)
  11143.  moveq #0,d0
  11144.  move.b vol0left,d0
  11145.  move.w d0,$a8(a6)
  11146.  
  11147. NoChan0sound:
  11148.  
  11149. *****************************************
  11150. *****************************************
  11151.  
  11152.  btst #0,intreqr(a6)
  11153.  beq.s nofinish1
  11154.  move.l #null,$b0(a6)
  11155.  move.w #100,$b4(a6)
  11156.  move.w #$0100,intreq(a6)
  11157. nofinish1:
  11158.  
  11159.  tst.b NoiseMade0pRIGHT
  11160.  beq.s NoChan1sound
  11161.  
  11162.  move.l Samp0endRIGHT,d0
  11163.  move.l pos0RIGHT,d1
  11164.  sub.l d1,d0
  11165.  lsr.l #1,d0
  11166.  move.w d0,$b4(a6)
  11167.  move.l d1,$b0(a6)
  11168.  ext.l d0
  11169.  divs #100,d0
  11170.  move.w d0,playnull1
  11171.  move.w #$8202,dmacon(a6)
  11172.  moveq #0,d0
  11173.  move.b vol0right,d0
  11174.  move.w d0,$b8(a6)
  11175.  
  11176. NoChan1sound:
  11177.  
  11178. *****************************************
  11179. *****************************************
  11180.  
  11181.  btst #1,intreqr(a6)
  11182.  beq.s nofinish2
  11183.  move.l #null,$c0(a6)
  11184.  move.w #100,$c4(a6)
  11185.  move.w #$0200,intreq(a6)
  11186. nofinish2:
  11187.  
  11188.  tst.b NoiseMade1pRIGHT
  11189.  beq.s NoChan2sound
  11190.  
  11191.  move.l Samp1endRIGHT,d0
  11192.  move.l pos1RIGHT,d1
  11193.  sub.l d1,d0
  11194.  lsr.l #1,d0
  11195.  move.w d0,$c4(a6)
  11196.  ext.l d0
  11197.  divs #100,d0
  11198.  move.w d0,playnull2
  11199.  
  11200.  move.l d1,$c0(a6)
  11201.  move.w #$8204,dmacon(a6)
  11202.  moveq #0,d0
  11203.  move.b vol1right,d0
  11204.  move.w d0,$c8(a6)
  11205.  
  11206. NoChan2sound:
  11207.  
  11208. *****************************************
  11209. *****************************************
  11210.  
  11211.  btst #2,intreqr(a6)
  11212.  beq.s nofinish3
  11213.  move.l #null,$d0(a6)
  11214.  move.w #100,$d4(a6)
  11215.  move.w #$0400,intreq(a6)
  11216. nofinish3:
  11217.  
  11218.  tst.b NoiseMade1pLEFT
  11219.  beq.s NoChan3sound
  11220.  
  11221.  move.l Samp1endLEFT,d0
  11222.  move.l pos1LEFT,d1
  11223.  sub.l d1,d0
  11224.  lsr.l #1,d0
  11225.  move.w d0,$d4(a6)
  11226.  ext.l d0
  11227.  divs #100,d0
  11228.  move.w d0,playnull3
  11229.  move.l d1,$d0(a6)
  11230.  move.w #$8208,dmacon(a6)
  11231.  moveq #0,d0
  11232.  move.b vol1left,d0
  11233.  move.w d0,$d8(a6)
  11234.  
  11235. NoChan3sound:
  11236.  
  11237. nomorechannels:
  11238.  
  11239.  move.l NoiseMade0LEFT,NoiseMade0pLEFT
  11240.  move.l #0,NoiseMade0LEFT
  11241.  move.l NoiseMade0RIGHT,NoiseMade0pRIGHT
  11242.  move.l #0,NoiseMade0RIGHT
  11243.  
  11244. ; tst.b playnull0
  11245. ; beq.s .nnul
  11246. ; sub.b #1,playnull0
  11247. ; bra.s chan0still
  11248. ;.nnul:
  11249. ;chan0still:
  11250.  
  11251.  tst.b NoiseMade0pLEFT
  11252.  bne.s chan0still
  11253.  tst.w playnull0
  11254.  beq.s nnul0
  11255.  sub.w #1,playnull0
  11256.  bra.s chan0still
  11257. nnul0:
  11258.  move.w #0,LEFTCHANDATA+2
  11259.  st LEFTCHANDATA+1
  11260. chan0still:
  11261.  
  11262.  tst.b NoiseMade0pRIGHT
  11263.  bne.s chan1still    ;it'll never work
  11264.  tst.w playnull1
  11265.  beq.s nnul1
  11266.  sub.w #1,playnull1
  11267.  bra.s chan1still
  11268. nnul1:
  11269.  move.w #0,RIGHTCHANDATA+2
  11270.  st RIGHTCHANDATA+1
  11271. chan1still:
  11272.  
  11273.  tst.b NoiseMade1pRIGHT
  11274.  bne.s chan2still
  11275.  tst.w playnull2
  11276.  beq.s nnul2
  11277.  sub.w #1,playnull2
  11278.  bra.s chan2still
  11279. nnul2:
  11280.  move.w #0,RIGHTCHANDATA+2+4
  11281.  st RIGHTCHANDATA+1+4
  11282. chan2still:
  11283.  
  11284.  tst.b NoiseMade1pLEFT
  11285.  bne.s chan3still
  11286.  tst.w playnull3
  11287.  beq.s nnul3
  11288.  sub.w #1,playnull3
  11289.  bra.s chan3still
  11290. nnul3:
  11291.  move.w #0,LEFTCHANDATA+2+4
  11292.  st LEFTCHANDATA+1+4
  11293.  
  11294. chan3still:
  11295.  
  11296.  
  11297.  movem.l (a7)+,d0-d7/a0-a6
  11298.  
  11299.  moveq #0,d0
  11300.  rts
  11301.  
  11302. backbeat: dc.w 0
  11303.  
  11304. playnull0: dc.w 0
  11305. playnull1: dc.w 0
  11306. playnull2: dc.w 0
  11307. playnull3: dc.w 0
  11308.  
  11309. Samp0endRIGHT: dc.l emptyend
  11310. Samp1endRIGHT: dc.l emptyend
  11311. Samp2endRIGHT: dc.l emptyend
  11312. Samp3endRIGHT: dc.l emptyend
  11313. Samp0endLEFT: dc.l emptyend
  11314. Samp1endLEFT: dc.l emptyend
  11315. Samp2endLEFT: dc.l emptyend
  11316. Samp3endLEFT: dc.l emptyend
  11317.  
  11318. Aupt0: dc.l null
  11319. Auback0: dc.l null+500
  11320. Aupt2: dc.l null3
  11321. Auback2: dc.l null3+500
  11322. Aupt3: dc.l null4
  11323. Auback3: dc.l null4+500
  11324. Aupt1: dc.l null2
  11325. Auback1: dc.l null2+500
  11326.  
  11327. NoiseMade0LEFT: dc.b 0
  11328. NoiseMade1LEFT: dc.b 0
  11329. NoiseMade2LEFT: dc.b 0
  11330. NoiseMade3LEFT: dc.b 0
  11331. NoiseMade0pLEFT: dc.b 0
  11332. NoiseMade1pLEFT: dc.b 0
  11333. NoiseMade2pLEFT: dc.b 0
  11334. NoiseMade3pLEFT: dc.b 0
  11335. NoiseMade0RIGHT: dc.b 0
  11336. NoiseMade1RIGHT: dc.b 0
  11337. NoiseMade2RIGHT: dc.b 0
  11338. NoiseMade3RIGHT: dc.b 0
  11339. NoiseMade0pRIGHT: dc.b 0
  11340. NoiseMade1pRIGHT: dc.b 0
  11341. NoiseMade2pRIGHT: dc.b 0
  11342. NoiseMade3pRIGHT: dc.b 0
  11343.  
  11344. empty: ds.l 100
  11345. emptyend:
  11346.  
  11347. **************************************
  11348. * I want a routine to calculate all the
  11349. * info needed for the sound player to
  11350. * work, given say position of noise, volume
  11351. * and sample number.
  11352.  
  11353. Samplenum: dc.w 0
  11354. Noisex: dc.w 0
  11355. Noisez: dc.w 0
  11356. Noisevol: dc.w 0
  11357. chanpick: dc.w 0
  11358. IDNUM: dc.w 0
  11359. needleft: dc.b 0
  11360. needright: dc.b 0
  11361. STEREO: dc.b $0
  11362. even
  11363. prot6: dc.w 0
  11364.  
  11365.  even
  11366.  
  11367. CHANNELDATA:
  11368. LEFTCHANDATA:
  11369.  dc.l $00000000
  11370.  dc.l $00000000
  11371.  dc.l $FF000000
  11372.  dc.l $FF000000
  11373. RIGHTCHANDATA:
  11374.  dc.l $00000000
  11375.  dc.l $00000000
  11376.  dc.l $FF000000
  11377.  dc.l $FF000000
  11378.  
  11379. RIGHTPLAYEDTAB: ds.l 20
  11380. LEFTPLAYEDTAB: ds.l 20
  11381.  
  11382. MakeSomeNoise:
  11383.  
  11384. ; Plan for new sound handler:
  11385. ; It is sent a sample number,
  11386. ; a position relative to the
  11387. ; player, an id number and a volume.
  11388. ; Also notifplaying.
  11389.  
  11390. ; indirect inputs are the available
  11391. ; channel flags and whether or not
  11392. ; stereo sound is selected.
  11393.  
  11394. ; the algorithm must decide
  11395. ; whether the new sound is more
  11396. ; important than the ones already
  11397. ; playing. Thus an 'importance'
  11398. ; must be calculated, probably
  11399. ; using volume.
  11400.  
  11401. ; The output needs to be:
  11402.  
  11403. ; Write the pointers and volumes of
  11404. ; the sound channels
  11405.  
  11406.  
  11407.  tst.b notifplaying
  11408.  beq.s dontworry
  11409.  
  11410. ; find if we are already playing
  11411.  
  11412.  move.b IDNUM,d0
  11413.  move.w #7,d1
  11414.  lea CHANNELDATA,a3
  11415. findsameasme
  11416.  tst.b (a3)
  11417.  bne.s notavail
  11418.  cmp.b 1(a3),d0
  11419.  beq SameAsMe
  11420. notavail:
  11421.  add.w #4,a3
  11422.  dbra d1,findsameasme
  11423.  bra dontworry
  11424. SameAsMe
  11425.  rts
  11426.  
  11427. noiseloud: dc.w 0
  11428.  
  11429. dontworry:
  11430.  
  11431. ; Ok its fine for us to play a sound.
  11432. ; So calculate left/right volume.
  11433.  
  11434.  move.w Noisex,d1
  11435.  muls d1,d1
  11436.  move.w Noisez,d2
  11437.  muls d2,d2
  11438.  move.w #64,d3
  11439.  move.w #32767,noiseloud
  11440.  moveq #1,d0
  11441.  add.l d1,d2
  11442.  beq pastcalc
  11443.  
  11444.  move.w #31,d0
  11445. .findhigh
  11446.  btst d0,d2
  11447.  bne .foundhigh
  11448.  dbra d0,.findhigh
  11449. .foundhigh
  11450.  asr.w #1,d0
  11451.  clr.l d3
  11452.  bset d0,d3
  11453.  move.l d3,d0
  11454.  
  11455.  move.w d0,d3
  11456.  muls d3,d3    ; x*x
  11457.  sub.l d2,d3    ; x*x-a
  11458.  asr.l #1,d3    ; (x*x-a)/2
  11459.  divs d0,d3    ; (x*x-a)/2x
  11460.  sub.w d3,d0    ; second approx
  11461.  bgt .stillnot0
  11462.  move.w #1,d0
  11463. .stillnot0
  11464.  
  11465.  move.w d0,d3
  11466.  muls d3,d3
  11467.  sub.l d2,d3
  11468.  asr.l #1,d3
  11469.  divs d0,d3
  11470.  sub.w d3,d0    ; second approx
  11471.  bgt .stillnot02
  11472.  move.w #1,d0
  11473. .stillnot02
  11474.  
  11475.  move.w Noisevol,d3
  11476.  ext.l d3
  11477.  asl.l #6,d3
  11478.  cmp.l #32767,d3
  11479.  ble.s .nnnn
  11480.  move.l #32767,d3
  11481. .nnnn
  11482.  
  11483.  asr.w #2,d0
  11484.  addq #1,d0
  11485.  divs d0,d3
  11486.  
  11487.  move.w d3,noiseloud
  11488.  
  11489.  cmp.w #64,d3
  11490.  ble.s notooloud
  11491.  move.w #64,d3
  11492. notooloud:
  11493.  
  11494. pastcalc:
  11495.  
  11496.     ; d3 contains volume of noise.
  11497.     
  11498.  move.w d3,d4
  11499.  tst.b STEREO
  11500.  beq NOSTEREO
  11501.  
  11502.  move.w d3,d2
  11503.  muls Noisex,d2
  11504.  asl.w #2,d0
  11505.  divs d0,d2
  11506.  
  11507.  bgt.s quietleft
  11508.  add.w d2,d4
  11509.  bge.s donequiet
  11510.  move.w #0,d4
  11511.  bra.s donequiet
  11512. quietleft:
  11513.  sub.w d2,d3
  11514.  bge.s donequiet
  11515.  move.w #0,d3
  11516. donequiet:
  11517.  
  11518. ; d3=leftvol?
  11519. ; d4=rightvol?
  11520.  
  11521.  clr.w needleft
  11522.  
  11523.  cmp.b d3,d4
  11524.  bgt.s RightLouder
  11525.  
  11526. ; Left is louder; is it MUCH louder?
  11527.  
  11528.  st needleft
  11529.  move.w d3,d2
  11530.  sub.w d4,d2
  11531.  cmp.w #32,d2
  11532.  slt needright
  11533.  bra aboutsame
  11534.  
  11535. RightLouder:
  11536.  st needright
  11537.  move.w d4,d2
  11538.  sub.w d3,d2
  11539.  cmp.w #32,d2
  11540.  slt needleft
  11541.  
  11542. aboutsame:
  11543.  
  11544.  
  11545. ; Find least important sound on left
  11546.  
  11547.  move.l #0,a2
  11548.  move.l #0,d5
  11549.  move.w #32767,d2
  11550.  move.b IDNUM,d0
  11551.  lea LEFTCHANDATA,a3
  11552.  move.w #3,d1
  11553. FindLeftChannel
  11554.  tst.b (a3)
  11555.  bne.s .notactive
  11556.  cmp.b 1(a3),d0
  11557.  beq.s FOUNDLEFT
  11558.  cmp.w 2(a3),d2
  11559.  blt.s .notactive
  11560.  move.w 2(a3),d2
  11561.  move.l a3,a2
  11562.  move.w d5,d6
  11563.  
  11564. .notactive:
  11565.  add.w #4,a3
  11566.  add.w #1,d5
  11567.  dbra d1,FindLeftChannel
  11568.  move.l a2,a3
  11569.  bra.s gopastleft
  11570. FOUNDLEFT:
  11571.  move.w d5,d6
  11572. gopastleft:
  11573.  tst.l a3
  11574.  bne.s FOUNDALEFT
  11575. NONOISE:
  11576.  rts
  11577. FOUNDALEFT:
  11578.  
  11579.  cmp.w noiseloud,d3
  11580.  bge.s NONOISE
  11581.  
  11582. ; d6 = channel number
  11583.  move.b d0,1(a3)
  11584.  move.w d3,2(a3)
  11585.  
  11586.  move.w Samplenum,d5
  11587.  move.l #SampleList,a3
  11588.  move.l (a3,d5.w*8),a1
  11589.  move.l 4(a3,d5.w*8),a2
  11590.  
  11591.  tst.b d6
  11592.  seq NoiseMade0LEFT
  11593.  beq.s .chan0
  11594.  cmp.b #2,d6
  11595.  slt NoiseMade1LEFT
  11596.  blt .chan1
  11597.  seq NoiseMade2LEFT
  11598.  beq .chan2
  11599.  st NoiseMade3LEFT
  11600.  
  11601.  move.b d5,LEFTPLAYEDTAB+9
  11602.  move.b d3,LEFTPLAYEDTAB+1+9
  11603.  move.b d4,LEFTPLAYEDTAB+2+9
  11604.  move.b d3,vol3left
  11605.  move.l a1,pos3LEFT
  11606.  move.l a2,Samp3endLEFT
  11607.  bra dorightchan
  11608.  
  11609. .chan0: 
  11610.  move.b d5,LEFTPLAYEDTAB
  11611.  move.b d3,LEFTPLAYEDTAB+1
  11612.  move.b d4,LEFTPLAYEDTAB+2
  11613.  move.l a1,pos0LEFT
  11614.  move.l a2,Samp0endLEFT
  11615.  move.b d3,vol0left
  11616.  bra dorightchan
  11617.  
  11618. .chan1:
  11619.  move.b d5,LEFTPLAYEDTAB+3
  11620.  move.b d3,LEFTPLAYEDTAB+1+3
  11621.  move.b d4,LEFTPLAYEDTAB+2+3
  11622.  move.b d3,vol1left
  11623.  move.l a1,pos1LEFT
  11624.  move.l a2,Samp1endLEFT
  11625.  bra dorightchan
  11626.  
  11627. .chan2: 
  11628.  move.b d5,LEFTPLAYEDTAB+6
  11629.  move.b d3,LEFTPLAYEDTAB+1+6
  11630.  move.b d4,LEFTPLAYEDTAB+2+6
  11631.  move.l a1,pos2LEFT
  11632.  move.l a2,Samp2endLEFT
  11633.  move.b d3,vol2left
  11634.  
  11635. dorightchan:
  11636.  
  11637. ; Find least important sound on right
  11638.  
  11639.  move.l #0,a2
  11640.  move.l #0,d5
  11641.  move.w #10000,d2
  11642.  move.b IDNUM,d0
  11643.  lea RIGHTCHANDATA,a3
  11644.  move.w #3,d1
  11645. FindRightChannel
  11646.  tst.b (a3)
  11647.  bne.s .notactive
  11648.  cmp.b 1(a3),d0
  11649.  beq.s FOUNDRIGHT
  11650.  cmp.w 2(a3),d2
  11651.  blt.s .notactive
  11652.  move.w 2(a3),d2
  11653.  move.l a3,a2
  11654.  move.w d5,d6
  11655.  
  11656. .notactive:
  11657.  add.w #4,a3
  11658.  add.w #1,d5
  11659.  dbra d1,FindRightChannel
  11660.  move.l a2,a3
  11661.  bra.s gopastright
  11662. FOUNDRIGHT:
  11663.  move.w d5,d6
  11664. gopastright:
  11665.  tst.l a3
  11666.  bne.s FOUNDARIGHT
  11667.  rts
  11668. FOUNDARIGHT:
  11669.  
  11670. ; d6 = channel number
  11671.  move.b d0,1(a3)
  11672.  move.w d3,2(a3)
  11673.  
  11674.  move.w Samplenum,d5
  11675.  move.l #SampleList,a3
  11676.  move.l (a3,d5.w*8),a1
  11677.  move.l 4(a3,d5.w*8),a2
  11678.  
  11679.  tst.b d6
  11680.  seq NoiseMade0RIGHT
  11681.  beq.s .chan0
  11682.  cmp.b #2,d6
  11683.  slt NoiseMade1RIGHT
  11684.  blt .chan1
  11685.  seq NoiseMade2RIGHT
  11686.  beq .chan2
  11687.  st NoiseMade3RIGHT
  11688.  
  11689.  move.b d5,RIGHTPLAYEDTAB+9
  11690.  move.b d3,RIGHTPLAYEDTAB+1+9
  11691.  move.b d4,RIGHTPLAYEDTAB+2+9
  11692.  move.b d4,vol3right
  11693.  move.l a1,pos3RIGHT
  11694.  move.l a2,Samp3endRIGHT
  11695.  rts
  11696.  
  11697. .chan0: 
  11698.  move.b d5,RIGHTPLAYEDTAB
  11699.  move.b d3,RIGHTPLAYEDTAB+1
  11700.  move.b d4,RIGHTPLAYEDTAB+2
  11701.  move.l a1,pos0RIGHT
  11702.  move.l a2,Samp0endRIGHT
  11703.  move.b d4,vol0right
  11704.  rts
  11705.  
  11706. .chan1:
  11707.  move.b d5,RIGHTPLAYEDTAB+3
  11708.  move.b d3,RIGHTPLAYEDTAB+1+3
  11709.  move.b d4,RIGHTPLAYEDTAB+2+3
  11710.  move.b d3,vol1right
  11711.  move.l a1,pos1RIGHT
  11712.  move.l a2,Samp1endRIGHT
  11713.  rts
  11714.  
  11715. .chan2: 
  11716.  move.b d5,RIGHTPLAYEDTAB+6
  11717.  move.b d3,RIGHTPLAYEDTAB+1+6
  11718.  move.b d4,RIGHTPLAYEDTAB+2+6
  11719.  move.l a1,pos2RIGHT
  11720.  move.l a2,Samp2endRIGHT
  11721.  move.b d3,vol2right
  11722.  rts
  11723.  
  11724. NOSTEREO:
  11725.  move.l #0,a2
  11726.  move.l #-1,d5
  11727.  move.w #32767,d2
  11728.  move.b IDNUM,d0
  11729.  lea CHANNELDATA,a3
  11730.  move.w #7,d1
  11731. FindChannel
  11732.  tst.b (a3)
  11733.  bne.s .notactive
  11734.  cmp.b 1(a3),d0
  11735.  beq.s FOUNDMYCHAN
  11736.  cmp.w 2(a3),d2
  11737.  blt.s .notactive
  11738.  move.w 2(a3),d2
  11739.  move.l a3,a2
  11740.  move.w d5,d6
  11741.  add.w #1,d6
  11742.  
  11743. .notactive:
  11744.  add.w #4,a3
  11745.  add.w #1,d5
  11746.  dbra d1,FindChannel
  11747.  
  11748.  move.l a2,a3
  11749.  bra.s gopastchan
  11750.  
  11751. FOUNDMYCHAN:
  11752.  move.w 2(a3),d2
  11753.  
  11754. FOUNDCHAN:
  11755.  move.w d5,d6
  11756.  add.w #1,d6
  11757. gopastchan:
  11758.  tst.w d6
  11759.  bge.s FOUNDACHAN
  11760. tooquiet:
  11761.  rts
  11762. FOUNDACHAN:
  11763.  
  11764. ; d6 = channel number
  11765.  
  11766.  cmp.w noiseloud,d2
  11767.  bgt.s tooquiet
  11768.  
  11769.  move.b d0,1(a3)
  11770.  move.w noiseloud,2(a3)
  11771.  
  11772.  move.w Samplenum,d5
  11773.  move.l #SampleList,a3
  11774.  move.l (a3,d5.w*8),a1
  11775.  move.l 4(a3,d5.w*8),a2
  11776.  
  11777.  tst.b d6
  11778.  beq .chan0
  11779.  cmp.b #2,d6
  11780.  blt .chan1
  11781.  beq .chan2
  11782.  cmp.b #4,d6
  11783.  blt .chan3
  11784.  beq .chan4
  11785.  cmp.b #6,d6
  11786.  blt .chan5
  11787.  beq .chan6
  11788.  st NoiseMade3RIGHT
  11789.  
  11790.  move.b d5,RIGHTPLAYEDTAB+9
  11791.  move.b d3,RIGHTPLAYEDTAB+1+9
  11792.  move.b d4,RIGHTPLAYEDTAB+2+9
  11793.  move.b d4,vol3right
  11794.  move.l a1,pos3RIGHT
  11795.  move.l a2,Samp3endRIGHT
  11796.  rts
  11797.  
  11798. .chan3:
  11799.  st NoiseMade3LEFT
  11800.  move.b d5,LEFTPLAYEDTAB+9
  11801.  move.b d3,LEFTPLAYEDTAB+1+9
  11802.  move.b d4,LEFTPLAYEDTAB+2+9
  11803.  move.b d3,vol3left
  11804.  move.l a1,pos3LEFT
  11805.  move.l a2,Samp3endLEFT
  11806.  bra dorightchan
  11807.  
  11808. .chan0: 
  11809.  st NoiseMade0LEFT
  11810.  move.b d5,LEFTPLAYEDTAB
  11811.  move.b d3,LEFTPLAYEDTAB+1
  11812.  move.b d4,LEFTPLAYEDTAB+2
  11813.  move.l a1,pos0LEFT
  11814.  move.l a2,Samp0endLEFT
  11815.  move.b d3,vol0left
  11816.  rts
  11817.  
  11818. .chan1:
  11819.  st NoiseMade1LEFT
  11820.  move.b d5,LEFTPLAYEDTAB+3
  11821.  move.b d3,LEFTPLAYEDTAB+1+3
  11822.  move.b d4,LEFTPLAYEDTAB+2+3
  11823.  move.b d3,vol1left
  11824.  move.l a1,pos1LEFT
  11825.  move.l a2,Samp1endLEFT
  11826.  rts
  11827.  
  11828. .chan2: 
  11829.  st NoiseMade2LEFT
  11830.  move.b d5,LEFTPLAYEDTAB+6
  11831.  move.b d3,LEFTPLAYEDTAB+1+6
  11832.  move.b d4,LEFTPLAYEDTAB+2+6
  11833.  move.l a1,pos2LEFT
  11834.  move.l a2,Samp2endLEFT
  11835.  move.b d3,vol2left
  11836.  rts
  11837.  
  11838. .chan4: 
  11839.  st NoiseMade0RIGHT
  11840.  move.b d5,RIGHTPLAYEDTAB
  11841.  move.b d3,RIGHTPLAYEDTAB+1
  11842.  move.b d4,RIGHTPLAYEDTAB+2
  11843.  move.l a1,pos0RIGHT
  11844.  move.l a2,Samp0endRIGHT
  11845.  move.b d4,vol0right
  11846.  rts
  11847.  
  11848. .chan5:
  11849.  st NoiseMade1RIGHT
  11850.  move.b d5,RIGHTPLAYEDTAB+3
  11851.  move.b d3,RIGHTPLAYEDTAB+1+3
  11852.  move.b d4,RIGHTPLAYEDTAB+2+3
  11853.  move.b d3,vol1right
  11854.  move.l a1,pos1RIGHT
  11855.  move.l a2,Samp1endRIGHT
  11856.  rts
  11857.  
  11858. .chan6: 
  11859.  st NoiseMade2RIGHT
  11860.  move.b d5,RIGHTPLAYEDTAB+6
  11861.  move.b d3,RIGHTPLAYEDTAB+1+6
  11862.  move.b d4,RIGHTPLAYEDTAB+2+6
  11863.  move.l a1,pos2RIGHT
  11864.  move.l a2,Samp2endRIGHT
  11865.  move.b d3,vol2right
  11866.  rts
  11867.  
  11868. SampleList:
  11869.  dc.l Scream,EndScream
  11870.  dc.l Shoot,EndShoot
  11871.  dc.l Munch,EndMunch
  11872.  dc.l PooGun,EndPooGun
  11873.  dc.l Collect,EndCollect
  11874. ;5
  11875.  dc.l DoorNoise,EndDoorNoise
  11876.  dc.l 0,0
  11877.  dc.l Stomp,EndStomp
  11878.  dc.l LowScream,EndLowScream
  11879.  dc.l BaddieGun,EndBaddieGun
  11880. ;10
  11881.  dc.l SwitchNoise,EndSwitch
  11882.  dc.l Reload,EndReload
  11883.  dc.l NoAmmo,EndNoAmmo
  11884.  dc.l Splotch,EndSplotch
  11885.  dc.l SplatPop,EndSplatPop
  11886. ;15
  11887.  dc.l Boom,EndBoom
  11888.  dc.l Hiss,EndHiss
  11889.  dc.l Howl1,EndHowl1
  11890.  dc.l Howl2,EndHowl2
  11891.  dc.l Pant,EndPant
  11892. ;20
  11893.  dc.l Whoosh,EndWhoosh
  11894.  dc.l ROAR,EndROAR
  11895.  dc.l whoosh,Endwhoosh
  11896.  dc.l 0,0
  11897.  dc.l 0,0
  11898.  dc.l 0,0
  11899.  dc.l 0,0
  11900.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  11901.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  11902.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  11903.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  11904.  
  11905.  dc.l 0
  11906.  
  11907. storeval: dc.w 0
  11908.  
  11909.  include "ab3:source_4000/wallchunk.s"
  11910.  include "ab3:source_4000/newloadfromdisk.s"
  11911.  include "ab3:source_4000/screensetup.s"
  11912.  include "ab3:source_4000/CONTROLLOOP.s"
  11913.  
  11914.  
  11915.  
  11916.  
  11917. saveinters:  
  11918.  dc.w 0
  11919.  
  11920. z: dc.w 10
  11921.  
  11922. notifplaying:
  11923.  dc.w 0
  11924.  
  11925. audpos1: dc.w 0
  11926. audpos1b: dc.w 0
  11927. audpos2: dc.w 0
  11928. audpos2b: dc.w 0
  11929. audpos3: dc.w 0
  11930. audpos3b: dc.w 0
  11931. audpos4: dc.w 0
  11932. audpos4b: dc.w 0
  11933.  
  11934. vol0left: dc.w 0
  11935. vol0right: dc.w 0
  11936. vol1left: dc.w 0
  11937. vol1right: dc.w 0
  11938. vol2left: dc.w 0
  11939. vol2right: dc.w 0
  11940. vol3left: dc.w 0
  11941. vol3right: dc.w 0
  11942.  
  11943. pos: dc.l 0
  11944.  
  11945. pos0LEFT: dc.l empty
  11946. pos1LEFT: dc.l empty
  11947. pos2LEFT: dc.l empty
  11948. pos3LEFT: dc.l empty
  11949. pos0RIGHT: dc.l empty
  11950. pos1RIGHT: dc.l empty
  11951. pos2RIGHT: dc.l empty
  11952. pos3RIGHT: dc.l empty
  11953.  
  11954. numtodo dc.w 0
  11955.  
  11956. npt: dc.w 0
  11957.  
  11958. pretab:
  11959. val SET 0
  11960.  REPT 128
  11961.  dc.b val
  11962. val SET val+1
  11963.  ENDR
  11964. val SET -128
  11965.  REPT 128
  11966.  dc.b val
  11967. val SET val+1
  11968.  ENDR 
  11969.  
  11970. tab:
  11971.  ifeq CHEESEY
  11972.  ds.b 256*65
  11973.  endc
  11974.  
  11975. test: dc.l 0
  11976.  ds.l 30
  11977.  
  11978.  
  11979.  even
  11980. ConstCols:
  11981. ; incbin "ConstCols"
  11982.  even
  11983. Smoothscalecols:
  11984. ; incbin "smoothbumppalscaled"
  11985.  even
  11986. SmoothTile:
  11987. ; incbin "smoothbumptile"
  11988.  even
  11989. Bumpscalecols:
  11990. ; incbin "Bumppalscaled"
  11991.  even
  11992. Bumptile:
  11993. ; incbin "bumptile"
  11994.  even
  11995. scalecols: ;incbin "bytepixpalscaled"
  11996.  even
  11997. ;floorscalecols:
  11998. ; incbin "floor256pal"
  11999. ; ds.w 256*4
  12000.  
  12001.  even
  12002. PaletteAddr: dc.l 0
  12003. ChunkAddr: dc.l 0
  12004. ;walltiles:
  12005. ; dc.l GreenMechanicWALL
  12006. ; dc.l BlueGreyMetalWALL
  12007. ; dc.l TechnoDetailWALL
  12008. ; dc.l BlueStoneWALL
  12009. ; dc.l RedAlertWALL
  12010. ; dc.l RockWALL
  12011. ;
  12012. ;GreenMechanicWALL: incbin "ab3:includes/walls/greenmechanic.wad"
  12013. ;BlueGreyMetalWALL: incbin "ab3:includes/walls/BlueGreyMetal.wad"
  12014. ;TechnoDetailWALL: incbin "ab3:includes/walls/TechnoDetail.wad"
  12015. ;BlueStoneWALL: incbin "ab3:includes/walls/bluestone.wad"
  12016. ;RedAlertWALL: incbin "ab3:includes/walls/redalert.wad"
  12017. ;RockWALL: incbin "ab3:includes/walls/rock.wad"
  12018.  
  12019. floortile:
  12020.  dc.l 0
  12021. ; incbin "floortile" 
  12022.  even
  12023. wallrouts:
  12024. ; incbin "2x2WallDraw" 
  12025.  CNOP 0,64
  12026.  
  12027.  ifeq CHEESEY 
  12028. BackPicture:
  12029.  incbin "rawback"
  12030. EndBackPicture:
  12031.  endc
  12032.  
  12033. drawpt: dc.l 0
  12034. olddrawpt: dc.l 0
  12035. frompt: dc.l 0 
  12036.  
  12037. SineTable:
  12038.  incbin "bigsine"
  12039.  
  12040. angspd: dc.w 0
  12041. flooryoff: dc.w 0
  12042. xoff: dc.l 0
  12043. yoff: dc.l 0
  12044. yvel: dc.l 0
  12045. zoff: dc.l 0
  12046. tyoff: dc.l 0
  12047. xspdval: dc.l 0
  12048. zspdval: dc.l 0
  12049. Zone: dc.w 0
  12050.  
  12051. PLR1: dc.b $ff
  12052.  even
  12053. PLR1_energy: dc.w 191
  12054. PLR1_GunSelected: dc.w 0
  12055. PLR1_cosval: dc.w 0
  12056. PLR1_sinval: dc.w 0
  12057. PLR1_angpos: dc.w 0
  12058. PLR1_angspd: dc.w 0
  12059. PLR1_xoff: dc.l 0
  12060. PLR1_yoff: dc.l 0
  12061. PLR1_yvel: dc.l 0
  12062. PLR1_zoff: dc.l 0
  12063. PLR1_tyoff: dc.l 0
  12064. PLR1_xspdval: dc.l 0
  12065. PLR1_zspdval: dc.l 0
  12066. PLR1_Zone: dc.w 0
  12067. PLR1_Roompt: dc.l 0
  12068. PLR1_FloorSpd: dc.l 0
  12069. PLR2_FloorSpd: dc.l 0
  12070. PLR1_OldRoompt: dc.l 0
  12071. PLR1_PointsToRotatePtr: dc.l 0
  12072. PLR1_ListOfGraphRooms: dc.l 0
  12073. PLR1_oldxoff: dc.l 0
  12074. PLR1_oldzoff: dc.l 0
  12075. PLR1_StoodInTop: dc.b 0
  12076.  even
  12077. PLR1_height: dc.l 0
  12078. PLR1_RoomBright: dc.w 0
  12079.  
  12080. DOUBLEWIDTH: dc.b $0,0
  12081. DOUBLEHEIGHT: dc.b 0,0
  12082. PLR1_TELEPORTED: dc.w 0
  12083. PLR2_TELEPORTED: dc.w 0
  12084.  
  12085.  ds.w 4
  12086.  
  12087. OLDX1: dc.l 0
  12088. OLDX2: dc.l 0
  12089. OLDZ1: dc.l 0
  12090. OLDZ2: dc.l 0
  12091.  
  12092. XDIFF1: dc.l 0
  12093. ZDIFF1: dc.l 0
  12094. XDIFF2: dc.l 0
  12095. ZDIFF2: dc.l 0
  12096.  
  12097. PLR1s_cosval: dc.w 0
  12098. PLR1s_sinval: dc.w 0
  12099. PLR1s_angpos: dc.w 0
  12100. PLR1s_angspd: dc.w 0
  12101. PLR1s_xoff: dc.l 0
  12102. PLR1s_yoff: dc.l 0
  12103. PLR1s_yvel: dc.l 0
  12104. PLR1s_zoff: dc.l 0
  12105. PLR1s_tyoff: dc.l 0
  12106. PLR1s_xspdval: dc.l 0
  12107. PLR1s_zspdval: dc.l 0
  12108. PLR1s_Zone: dc.w 0
  12109. PLR1s_Roompt: dc.l 0
  12110. PLR1s_OldRoompt: dc.l 0
  12111. PLR1s_PointsToRotatePtr: dc.l 0
  12112. PLR1s_ListOfGraphRooms: dc.l 0
  12113. PLR1s_oldxoff: dc.l 0
  12114. PLR1s_oldzoff: dc.l 0
  12115. PLR1s_height: dc.l 0
  12116. PLR1s_targheight: dc.l 0
  12117.  
  12118. p1_xoff: dc.l 0
  12119. p1_zoff: dc.l 0
  12120. p1_yoff: dc.l 0
  12121. p1_height: dc.l 0
  12122. p1_angpos: dc.w 0
  12123. p1_bobble: dc.w 0
  12124. p1_clicked: dc.b 0
  12125. p1_spctap: dc.b 0
  12126. p1_ducked: dc.b 0
  12127. p1_gunselected: dc.b 0
  12128. p1_fire: dc.b 0
  12129.  even
  12130. p1_holddown: dc.w 0
  12131.  
  12132.  ds.w 4
  12133.  
  12134. PLR2: dc.b $ff
  12135.  even
  12136. PLR2_GunSelected: dc.w 0
  12137. PLR2_energy: dc.w 191
  12138. PLR2_cosval: dc.w 0
  12139. PLR2_sinval: dc.w 0
  12140. PLR2_angpos: dc.w 0
  12141. PLR2_angspd: dc.w 0
  12142. PLR2_xoff: dc.l 0
  12143. PLR2_yoff: dc.l 0
  12144. PLR2_yvel: dc.l 0
  12145. PLR2_zoff: dc.l 0
  12146. PLR2_tyoff: dc.l 0
  12147. PLR2_xspdval: dc.l 0
  12148. PLR2_zspdval: dc.l 0
  12149. PLR2_Zone: dc.w 0
  12150. PLR2_Roompt: dc.l 0
  12151. PLR2_OldRoompt: dc.l 0
  12152. PLR2_PointsToRotatePtr: dc.l 0
  12153. PLR2_ListOfGraphRooms: dc.l 0
  12154. PLR2_oldxoff: dc.l 0
  12155. PLR2_oldzoff: dc.l 0
  12156. PLR2_StoodInTop: dc.b 0
  12157.  even
  12158. PLR2_height: dc.l 0
  12159.  
  12160.  ds.w 4
  12161.  
  12162. PLR2s_cosval: dc.w 0
  12163. PLR2s_sinval: dc.w 0
  12164. PLR2s_angpos: dc.w 0
  12165. PLR2s_angspd: dc.w 0
  12166. PLR2s_xoff: dc.l 0
  12167. PLR2s_yoff: dc.l 0
  12168. PLR2s_yvel: dc.l 0
  12169. PLR2s_zoff: dc.l 0
  12170. PLR2s_tyoff: dc.l 0
  12171. PLR2s_xspdval: dc.l 0
  12172. PLR2s_zspdval: dc.l 0
  12173. PLR2s_Zone: dc.w 0
  12174. PLR2s_Roompt: dc.l 0
  12175. PLR2s_OldRoompt: dc.l 0
  12176. PLR2s_PointsToRotatePtr: dc.l 0
  12177. PLR2s_ListOfGraphRooms: dc.l 0
  12178. PLR2s_oldxoff: dc.l 0
  12179. PLR2s_oldzoff: dc.l 0
  12180. PLR2s_height: dc.l 0
  12181. PLR2s_targheight: dc.l 0
  12182.  
  12183.  ds.w 4
  12184.  
  12185. p2_xoff: dc.l 0
  12186. p2_zoff: dc.l 0
  12187. p2_yoff: dc.l 0
  12188. p2_height: dc.l 0
  12189. p2_angpos: dc.w 0
  12190. p2_bobble: dc.w 0
  12191. p2_clicked: dc.b 0
  12192. p2_spctap: dc.b 0
  12193. p2_ducked: dc.b 0
  12194. p2_gunselected: dc.b 0
  12195. p2_fire: dc.b 0
  12196.  even
  12197. p2_holddown: dc.w 0
  12198.  
  12199. liftanimtab:
  12200.  
  12201. endliftanimtab:
  12202.  
  12203. glassball:
  12204. ; incbin "glassball.inc"
  12205.  
  12206. endglass
  12207. glassballpt: dc.l glassball
  12208.  
  12209. rndtab: ; incbin "randfile"
  12210. endrnd: 
  12211.  
  12212. brightanimtab:
  12213. ; dcb.w 200,20
  12214. ; dc.w 5
  12215. ; dc.w 10,20
  12216. ; dc.w 5
  12217. ; dcb.w 30,20
  12218. ; dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  12219. ; dcb.w 40,0
  12220. ; dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  12221. ; dcb.w 300,0
  12222. ; dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  12223. ; dc.w -1
  12224.  
  12225. Roompt: dc.l 0
  12226. OldRoompt: dc.l 0
  12227.  
  12228. *****************************************************************
  12229.  *
  12230.  include "AB3:source_4000/LevelData2"
  12231.  *
  12232. *****************************************************************
  12233.  
  12234.  
  12235. wallpt: dc.l 0
  12236. floorpt: dc.l 0
  12237.  
  12238. Rotated:
  12239.  ds.l 2*800 
  12240. ObjRotated:
  12241.  ds.l 2*500
  12242.  
  12243. OnScreen:
  12244.  ds.l 2*800 
  12245.  
  12246. startwait: dc.w 0
  12247. endwait: dc.w 0
  12248.  
  12249. ;Faces:
  12250. ; incbin "faces2raw"
  12251.  
  12252. LINKS: dc.l 0
  12253. FLYLINKS: dc.l 0
  12254. *************************************************************
  12255.  
  12256. consttab:
  12257.  incbin "constantfile"
  12258.  
  12259. *******************************************************************
  12260.  
  12261.  
  12262.  
  12263. *********************************
  12264.  
  12265. ; include "ab3:source_4000/loadmod.a"
  12266. ; include "ab3:source_4000/proplayer.a"
  12267.  
  12268.  
  12269. darkentab: 
  12270. ;val SET 0
  12271. ; REPT 256
  12272. ; dc.b val
  12273. ;val SET val+1
  12274. ; ENDR
  12275. ; incbin "darkenfile"
  12276.  
  12277. MIDDLEX: dc.w 0
  12278. RIGHTX: dc.w 192
  12279. FULLSCR: dc.w 0
  12280.  
  12281. SHADINGTABLE: incbin "SHADEFILE" 
  12282.  
  12283. ******************************************
  12284. * Link file !*****************************
  12285. ******************************************
  12286.  
  12287. LINKSPACE:
  12288. ; ds.l 22500
  12289. ; incbin "ab3:includes/test.lnk"
  12290.  
  12291. LINKname:
  12292.  dc.b "ab3:includes/test.lnk",0
  12293.  
  12294. LINKFILE:
  12295.  dc.l LINKSPACE
  12296.  
  12297. ******************************************
  12298.  
  12299.  
  12300. brightentab:
  12301.  incbin "brightenfile"
  12302. WorkSpace:
  12303.  ds.l 8192 
  12304. waterfile:
  12305.  incbin "waterfile"
  12306.  
  12307.  SECTION ffff,CODE_C
  12308.  
  12309. nullspr: dc.l 0
  12310.  
  12311.  cnop 0,8
  12312. ;borders:
  12313. ; incbin "newleftbord"
  12314. ; incbin "newrightbord"
  12315.  
  12316. health: 
  12317. ;incbin "healthstrip"
  12318. Ammunition: 
  12319. ;incbin "ammostrip"
  12320. healthpal: 
  12321. ;incbin "healthpal"
  12322. PanelKeys: 
  12323. ;incbin "greenkey"
  12324. ; incbin "redkey"
  12325. ; incbin "yellowkey"
  12326. ; incbin "bluekey"
  12327.  
  12328. null: ds.w 100
  12329. null2: ds.w 100
  12330. null3: ds.w 100
  12331. null4: ds.w 100
  12332.  
  12333.  
  12334. Blurbfield:
  12335.  
  12336.  dc.w bpl1ptl
  12337. bl1l: dc.w 0
  12338.  dc.w bpl1pth
  12339. bl1h: dc.w 0
  12340.  
  12341.  dc.w diwstart,$2c81
  12342.  dc.w diwstop,$1cc1
  12343.  dc.w ddfstart,$38
  12344.  dc.w ddfstop,$b8
  12345.  dc.w bplcon0,$9201
  12346.  dc.w bplcon1,0
  12347.  dc.w $106,$c40
  12348. blcols:
  12349.  dc.w col0,0
  12350.  dc.w col1,$fff
  12351.  
  12352.  dc.w $108,0
  12353.  dc.w $10a,0
  12354.  
  12355.  dc.w $ffff,$fffe
  12356.  dc.w $ffff,$fffe
  12357.  
  12358. nullline:
  12359.  ds.b 80    
  12360.  
  12361.  include "ab3:source_4000/titlecop.s"
  12362.  
  12363. bigfield:    
  12364.                 ; Start of our copper list.
  12365.  dc.w dmacon,$8020
  12366.  dc.w intreq,$8011
  12367.  dc.w $1fc,$f
  12368.  dc.w diwstart
  12369. winstart: dc.w $2c81
  12370.  dc.w diwstop
  12371. winstop: dc.w $2cc1
  12372.  dc.w ddfstart
  12373. fetchstart: dc.w $38
  12374.  dc.w ddfstop
  12375. fetchstop: dc.w $b8
  12376.  
  12377. bordercols:
  12378.  incbin "borderpal"
  12379.  
  12380.  dc.w spr0ptl
  12381. s0l:
  12382.  dc.w 0
  12383.  dc.w spr0pth
  12384. s0h:
  12385.  dc.w 0
  12386.  dc.w spr1ptl
  12387. s1l:
  12388.  dc.w 0
  12389.  dc.w spr1pth
  12390. s1h:
  12391.  dc.w 0
  12392.  dc.w spr2ptl
  12393. s2l:
  12394.  dc.w 0
  12395.  dc.w spr2pth
  12396. s2h:
  12397.  dc.w 0
  12398.  dc.w spr3ptl
  12399. s3l:
  12400.  dc.w 0
  12401.  dc.w spr3pth
  12402. s3h:
  12403.  dc.w 0
  12404.  dc.w spr4ptl
  12405. s4l:
  12406.  dc.w 0
  12407.  dc.w spr4pth
  12408. s4h:
  12409.  dc.w 0
  12410.  dc.w spr5ptl
  12411. s5l:
  12412.  dc.w 0
  12413.  dc.w spr5pth
  12414. s5h:
  12415.  dc.w 0
  12416.  dc.w spr6ptl
  12417. s6l:
  12418.  dc.w 0
  12419.  dc.w spr6pth
  12420. s6h:
  12421.  dc.w 0
  12422.  dc.w spr7ptl
  12423. s7l:
  12424.  dc.w 0
  12425.  dc.w spr7pth
  12426. s7h:
  12427.  dc.w 0
  12428.  
  12429. ; dc.w $106,$c42
  12430. ; incbin "borderpal"
  12431.  
  12432.  dc.w $106,$c42
  12433.  
  12434.  dc.w bplcon0,$0211
  12435.  dc.w bplcon1
  12436. smoff:
  12437.  dc.w $0
  12438.  
  12439.  dc.w $108
  12440. modulo: dc.w 0
  12441.  dc.w $10a,0
  12442.  
  12443.  dc.w $1001,$ff00
  12444.  dc.w intreq,$11
  12445.  
  12446. PALETTESPACE:
  12447.  dcb.l 528,$1fe0000
  12448.  
  12449.  dc.w $2001,$ff00
  12450.  
  12451.  dc.w bpl1pth
  12452. pl1h
  12453.  dc.w 0
  12454.  
  12455.  dc.w bpl1ptl
  12456. pl1l
  12457.  dc.w 0
  12458.  
  12459.  dc.w bpl2pth
  12460. pl2h
  12461.  dc.w 0
  12462.  
  12463.  dc.w bpl2ptl
  12464. pl2l
  12465.  dc.w 0
  12466.  
  12467.  dc.w bpl3pth
  12468. pl3h
  12469.  dc.w 0
  12470.  
  12471.  dc.w bpl3ptl
  12472. pl3l
  12473.  dc.w 0
  12474.  
  12475.  dc.w bpl4pth
  12476. pl4h
  12477.  dc.w 0
  12478.  
  12479.  dc.w bpl4ptl
  12480. pl4l
  12481.  dc.w 0
  12482.  
  12483.  dc.w bpl5pth
  12484. pl5h
  12485.  dc.w 0
  12486.  
  12487.  dc.w bpl5ptl
  12488. pl5l
  12489.  dc.w 0
  12490.  
  12491.  dc.w bpl6pth
  12492. pl6h
  12493.  dc.w 0
  12494.  
  12495.  dc.w bpl6ptl
  12496. pl6l
  12497.  dc.w 0
  12498.  
  12499.  dc.w bpl7pth
  12500. pl7h
  12501.  dc.w 0
  12502.  
  12503.  dc.w bpl7ptl
  12504. pl7l
  12505.  dc.w 0
  12506.  
  12507.  dc.w bpl8pth
  12508. pl8h
  12509.  dc.w 0
  12510.  
  12511.  dc.w bpl8ptl
  12512. pl8l
  12513.  dc.w 0
  12514.  
  12515.  
  12516. val SET $2c
  12517. SCRMODULOS:
  12518.  REPT 232
  12519.  dc.b val,1,$ff,$fe
  12520.  dc.w $108,0
  12521.  dc.w $10a,0
  12522.  dc.b val,$df,$ff,$fe
  12523. val SET (val+1)&$ff
  12524.  ENDR
  12525.  
  12526.  dc.w $108,0,$10a,0
  12527.  dc.w $2401,$ff00
  12528.  dc.w ddfstop,$c8
  12529.  dc.w bplcon0,$9201
  12530.  dc.w bpl1ptl
  12531. scroll:
  12532.  dc.w 0
  12533.  dc.w bpl1pth
  12534. scrolh:
  12535.  dc.w 0
  12536.  
  12537.  dc.w $106,$c40
  12538.  dc.w $180,0
  12539.  dc.w $182,$f0
  12540. ; dc.w $108,40
  12541. ; dc.w $10a,40
  12542.  
  12543. ; dc.w $80
  12544. ;JUMPBACKH:
  12545. ; dc.w 0
  12546. ; dc.w $82
  12547. ;JUMPBACKL:
  12548. ; dc.w 0
  12549.  
  12550. ; dc.w $8a,0
  12551.  
  12552.  dc.w $ffff,$fffe
  12553.  dc.w $ffff,$fffe
  12554.  
  12555. PALETTEBIT:
  12556.  incbin "256palette"
  12557.  dc.w $ffff,$fffe
  12558.  
  12559. yposcop:
  12560. ; dc.w $2a11,$fffe
  12561. ; dc.w $8a,0
  12562.  
  12563. ; ds.l 104*12
  12564.  
  12565. ;colbars:
  12566. ;val SET $2a
  12567. ; dcb.l 104*80,$1fe0000
  12568. ; dc.w $106,$c42
  12569. ; dc.w $80
  12570. ;pch1:
  12571. ; dc.w 0
  12572. ; dc.w $82
  12573. ;pcl1:
  12574. ; dc.w 0 
  12575. ; dc.w $88,0
  12576. ; dc.w $ffff,$fffe       ; End copper list.
  12577.  
  12578. ; ds.l 104*12
  12579.  
  12580.  
  12581. ;colbars2:
  12582. ;val SET $2a
  12583. ; dcb.l 104*80,$1fe0000
  12584. ; dc.w $106,$c42
  12585. ; dc.w $80
  12586. ;pch2:
  12587. ; dc.w 0
  12588. ; dc.w $82
  12589. ;pcl2:
  12590. ; dc.w 0
  12591. ; dc.w $88,0
  12592. ; dc.w $ffff,$fffe       ; End copper list.
  12593.  
  12594. ; ds.l 104*10
  12595.  
  12596. NullCopper:
  12597.  dc.w $ffff,$fffe
  12598.  
  12599. hitcol: dc.l 0
  12600.  
  12601. old: dc.l 0
  12602.  
  12603.  CNOP 0,64
  12604. SCROLLSCRN: ds.l 20*16
  12605.  
  12606. SCROLLOFFSET: dc.w 0
  12607. SCROLLTIMER: dc.w 100
  12608. SCROLLDIRECTION: dc.w 1
  12609. SCROLLXPOS: dc.w 0
  12610. SCROLLPOINTER: dc.l testscroll
  12611. ENDSCROLL: dc.l endtestscroll
  12612.  
  12613. testscroll:
  12614. ;      12345678901234567890123456789012345678901234567890123456789012345678901234567890
  12615. ; dc.b "The Quick Brown Fox Jumped Over The Lazy Dog!                                   "
  12616. ; dc.b "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ                            "
  12617. ; dc.b "The Quick Brown Fox Jumped Over The Lazy Dog!                                   "
  12618.  
  12619. BLANKSCROLL:
  12620.  dc.b "                                                                                "
  12621. endtestscroll: 
  12622.  
  12623. prot5: dc.w 0
  12624. PanelCop:
  12625.  
  12626.  dc.w $80
  12627. och:
  12628.  dc.w 0
  12629.  dc.w $82
  12630. ocl:
  12631.  dc.w 0
  12632.  
  12633. statskip:
  12634.  dc.w $1fe,0
  12635.  dc.w $1fe,0
  12636.  
  12637.  dc.w $10c,0
  12638.  dc.w bplcon0,$1201
  12639.  dc.w bpl1ptl
  12640. n1l:
  12641.  dc.w 0
  12642.  dc.w bpl1pth
  12643. n1h:
  12644.  dc.w 0
  12645.  dc.w $108,-24
  12646. ; incbin "Panelpal"
  12647.  
  12648.  dc.w bpl2pth
  12649. p2h
  12650.  dc.w 0
  12651.  
  12652.  dc.w bpl2ptl
  12653. p2l
  12654.  dc.w 0
  12655.  
  12656.  dc.w bpl3pth
  12657. p3h
  12658.  dc.w 0
  12659.  
  12660.  dc.w bpl3ptl
  12661. p3l
  12662.  dc.w 0
  12663.  
  12664.  dc.w bpl4pth
  12665. p4h
  12666.  dc.w 0
  12667.  dc.w bpl4ptl
  12668. p4l
  12669.  dc.w 0
  12670.  dc.w bpl5pth
  12671. p5h
  12672.  dc.w 0
  12673.  dc.w bpl5ptl
  12674. p5l
  12675.  dc.w 0
  12676.  dc.w bpl6pth
  12677. p6h
  12678.  dc.w 0
  12679.  dc.w bpl6ptl
  12680. p6l
  12681.  dc.w 0
  12682.  dc.w bpl7pth
  12683. p7h
  12684.  dc.w 0
  12685.  dc.w bpl7ptl
  12686. p7l
  12687.  dc.w 0
  12688.  dc.w bpl8pth
  12689. p8h
  12690.  dc.w 0
  12691.  dc.w bpl8ptl
  12692. p8l
  12693.  dc.w 0
  12694.  
  12695.  
  12696.  dc.w ddfstart,$38
  12697.  dc.w ddfstop,$b8
  12698.  dc.w diwstart,$2c81
  12699.  dc.w diwstop,$2cc1
  12700.  
  12701.  dc.w bplcon0
  12702. Panelcon: dc.w $0211
  12703.  dc.w bpl1pth
  12704. p1h
  12705.  dc.w 0
  12706.  
  12707.  dc.w bpl1ptl
  12708. p1l
  12709.  dc.w 0
  12710.  
  12711.  
  12712.  dc.w $108,40*7
  12713.  dc.w $10a,40*7
  12714.  
  12715.  dc.w $ffff,$fffe
  12716.  
  12717.  dc.w $180,$fff
  12718.  
  12719.  
  12720.  dc.w $f801,$ff00
  12721.  dc.w col1,$50
  12722.  dc.w $f901,$ff00
  12723.  dc.w col1,$90
  12724.  dc.w $fa01,$ff00
  12725.  dc.w col1,$f0
  12726.  dc.w $fb01,$ff00
  12727.  dc.w col1,$f0
  12728.  dc.w $fc01,$ff00
  12729.  dc.w col1,$90
  12730.  dc.w $fd01,$ff00
  12731.  dc.w col1,$50
  12732.  
  12733.  dc.w $fe01,$ff00
  12734.  dc.w col1,$fff
  12735.  
  12736.  dc.w $ffdf,$fffe
  12737.  dc.w $a01,$ff00
  12738.  dc.w bplcon0,$201
  12739.  
  12740. ; incbin "faces2cols"
  12741.  dc.w bpl1pth
  12742. f1h
  12743.  dc.w 0
  12744.  
  12745.  dc.w bpl1ptl
  12746. f1l
  12747.  dc.w 0
  12748.  
  12749.  dc.w bpl2pth
  12750. f2h
  12751.  dc.w 0
  12752.  
  12753.  dc.w bpl2ptl
  12754. f2l
  12755.  dc.w 0
  12756.  
  12757.  dc.w bpl3pth
  12758. f3h
  12759.  dc.w 0
  12760.  
  12761.  dc.w bpl3ptl
  12762. f3l
  12763.  dc.w 0
  12764.  
  12765.  dc.w bpl4pth
  12766. f4h
  12767.  dc.w 0
  12768.  dc.w bpl4ptl
  12769. f4l
  12770.  dc.w 0
  12771.  
  12772.  dc.w bpl5pth
  12773. f5h
  12774.  dc.w 0
  12775.  dc.w bpl5ptl
  12776. f5l
  12777.  dc.w 0
  12778.  
  12779.  dc.w $0c01,$ff00
  12780.  dc.w bplcon0,$5201
  12781.   
  12782.  dc.w $ffff,$fffe
  12783.  
  12784.  cnop 0,64
  12785. FacePlace:
  12786. ; ds.l 6*32*5
  12787.  
  12788. TEXTSCRN: dc.l 0
  12789.  
  12790. TEXTCOP:
  12791.  dc.w intreq,$8030
  12792.  
  12793.  dc.w spr0ptl
  12794. txs0l:
  12795.  dc.w 0
  12796.  dc.w spr0pth
  12797. txs0h:
  12798.  dc.w 0
  12799.  dc.w spr1ptl
  12800. txs1l:
  12801.  dc.w 0
  12802.  dc.w spr1pth
  12803. txs1h:
  12804.  dc.w 0
  12805.  dc.w spr2ptl
  12806. txs2l:
  12807.  dc.w 0
  12808.  dc.w spr2pth
  12809. txs2h:
  12810.  dc.w 0
  12811.  dc.w spr3ptl
  12812. txs3l:
  12813.  dc.w 0
  12814.  dc.w spr3pth
  12815. txs3h:
  12816.  dc.w 0
  12817.  dc.w spr4ptl
  12818. txs4l:
  12819.  dc.w 0
  12820.  dc.w spr4pth
  12821. txs4h:
  12822.  dc.w 0
  12823.  dc.w spr5ptl
  12824. txs5l:
  12825.  dc.w 0
  12826.  dc.w spr5pth
  12827. txs5h:
  12828.  dc.w 0
  12829.  dc.w spr6ptl
  12830. txs6l:
  12831.  dc.w 0
  12832.  dc.w spr6pth
  12833. txs6h:
  12834.  dc.w 0
  12835.  dc.w spr7ptl
  12836. txs7l:
  12837.  dc.w 0
  12838.  dc.w spr7pth
  12839. txs7h:
  12840.  dc.w 0
  12841.  
  12842.  
  12843.  dc.w $10c,$0088
  12844.  
  12845.  dc.w $1fc,$f
  12846.  dc.w diwstart,$2c81    ; Top left corner of screen.
  12847.  dc.w diwstop,$2cc1     ; Bottom right corner of screen.
  12848.  dc.w ddfstart,$38      ; Data fetch start.
  12849.  dc.w ddfstop,$c8       ; Data fetch stop.
  12850.  
  12851.  dc.w bplcon0
  12852. TSCP:
  12853.  dc.w $9201
  12854.  
  12855.  dc.w $106,$c40
  12856.  
  12857.  dc.w $2a01,$ff00
  12858.  
  12859.  dc.w col0,0
  12860.  dc.w col1
  12861. TOPLET:
  12862. TXTCOLL:
  12863.  dc.w 0
  12864.   dc.w col2
  12865. BOTLET:
  12866.  dc.w 0
  12867.  dc.w col3
  12868. ALLTEXT:
  12869.  dc.w $fff
  12870.  dc.w $106,$e40
  12871.  dc.w col3
  12872. ALLTEXTLOW:
  12873.  dc.w $0
  12874.  
  12875.  
  12876.  dc.w bpl1pth
  12877. TSPTh:
  12878.  dc.w 0
  12879.  dc.w bpl1ptl
  12880. TSPTl:
  12881.  dc.w 0
  12882.  
  12883.  dc.w bpl2pth
  12884. TSPTh2:
  12885.  dc.w 0
  12886.  dc.w bpl2ptl
  12887. TSPTl2:
  12888.  dc.w 0
  12889.  
  12890.  
  12891.  dc.w $108,0
  12892.  dc.w $10a,0
  12893.  
  12894.  dc.w $ffff,$fffe
  12895.  
  12896. ********************************************
  12897. * Stuff you don't have to worry about yet. *
  12898. ********************************************
  12899.  
  12900. closeeverything:
  12901.  
  12902. ; jsr mt_end
  12903.  
  12904.  move.l #nullcop,d0
  12905. ; move.l old,d0
  12906.  
  12907.  
  12908. ;charlie  
  12909.  move.l d0,$dff080     ; Restore old copper list.
  12910.  move.w d0,ocl
  12911.  swap d0
  12912.  move.w d0,och
  12913.  
  12914. ; move.l doslib,a6
  12915. ; move.l #4,d1
  12916. ; jsr -198(a6)
  12917.  
  12918. ; move.l doslib,d0
  12919. ; move.l d0,a1
  12920. ; move.l 4.w,a6
  12921. ; jsr CloseLib(a6)
  12922.  
  12923.  move.l #$dff000,a6
  12924.  move.w #$8020,dmacon(a6)
  12925.  move.w #$f,dmacon(a6)
  12926.  
  12927. ; move.l 4.w,a6
  12928. ; lea VBLANKInt,a1
  12929. ; moveq #INTB_COPER,d0
  12930. ; jsr _LVORemIntServer(a6)
  12931.  
  12932. ; IFEQ CD32VER
  12933. ; move.l OLDKINT,$68.w
  12934. ; ENDC
  12935. ; move.w saveinters,d0
  12936. ; or.w #$c000,d0
  12937. ; move.w d0,intena(a6)
  12938.  clr.w $dff0a8
  12939.  clr.w $dff0b8
  12940.  clr.w $dff0c8
  12941.  clr.w $dff0d8
  12942.  
  12943.  
  12944. ; move.l oldview,a1
  12945. ; move.l a1,d0
  12946. ; move.l gfxbase,a6
  12947. ; jsr -$de(a6)
  12948.  
  12949. ; cmp.b #'s',mors
  12950. ; beq.s leaveold
  12951. ; move.w #$f8e,$dff1dc
  12952. ;leaveold:
  12953.  
  12954.  jsr RELEASELEVELMEM
  12955.  jsr RELEASESCRNMEM
  12956.  
  12957.  move.l #0,d0
  12958.  
  12959.  rts
  12960.  
  12961.  
  12962.  
  12963. intbase: dc.l 0
  12964. gfxbase: dc.l 0
  12965. oldview: dc.l 0
  12966.  
  12967. stuff:
  12968.  
  12969.     PRSDL
  12970.     Lea    gfxname(pc),a1    
  12971.     Moveq.l    #0,d0
  12972.     Move.l    $4.w,a6    
  12973.     Jsr    -$228(a6)
  12974.     add.w d1,RVAL1
  12975.     Move.l     d0,gfxbase
  12976.     Move.l    d0,a6                Use As Base Reg
  12977.     Move.l    34(a6),oldview
  12978.     move.l 38(a6),old
  12979.     rts
  12980.  
  12981. gfxname dc.b "graphics.library",0
  12982.  even
  12983. INTUNAME    dc.b    "intuition.library",0
  12984.  
  12985.  even
  12986.  
  12987.  
  12988.  cnop 0,64
  12989.  
  12990. Panel:
  12991.  dc.l 0
  12992.  
  12993. TimerScr: 
  12994. ;ds.b 40*64
  12995.  
  12996. scrntab:
  12997.  ds.b 16
  12998. val SET 32
  12999.  REPT 96
  13000.  dc.b val,val,val
  13001. val SET val+1
  13002.  ENDR
  13003.  ds.b 16
  13004.  
  13005. smallscrntab:
  13006. val SET 32
  13007.  REPT 96
  13008.  dc.b val,val
  13009. val SET val+1
  13010.  ENDR
  13011.  
  13012.  cnop 0,64
  13013. scrn:
  13014.  dc.l 0
  13015. ; incbin "ab3:includes/newborderRAW"
  13016. ; ds.b 80
  13017. scrn2:
  13018.  dc.l 0
  13019.  
  13020. ;flib:
  13021. ; incbin "ab3:includes/newborderRAW"
  13022. ; ds.b 80
  13023. ;flib2:
  13024. ; incbin "ab3:includes/newborderRAW"
  13025. ; ds.b 80
  13026.  
  13027. ; incbin "ab3:includes/newborderRAW"
  13028. ; ds.b 80
  13029.  
  13030. SCRNDRAWPT: dc.l 0
  13031. SCRNSHOWPT: dc.l 0
  13032.  
  13033. ; dcb.l 8,$33333333
  13034. ; dc.l 0
  13035. ; dc.l 0
  13036. ; dcb.l 8,$0f0f0f0f
  13037. ; dc.l 0
  13038. ; dc.l 0
  13039. ;
  13040. ; dcb.l 8,$00ff00ff
  13041. ; dc.l 0
  13042. ; dc.l 0
  13043. ; dcb.l 8,$0000ffff
  13044. ; dc.l 0
  13045. ; dc.l 0
  13046. ; dc.l 0,-1,0,-1,0,-1,0,-1
  13047. ; dc.l 0
  13048. ; dc.l 0
  13049. ; dc.l -1,-1,0,0,-1,-1,0,0
  13050. ; dc.l 0
  13051. ; dc.l 0
  13052. ; dc.l 0,0,-1,-1,-1,-1,-1,-1
  13053. ; dc.l 0
  13054. ; dc.l 0
  13055.  
  13056. NumTimes: dc.l 0
  13057. TimeCount: dc.l 0
  13058. oldtime: dc.l 0
  13059. counting: dc.b 0
  13060. oktodisplay: dc.b 0
  13061.  
  13062. INITTIMER:
  13063.  move.l #0,TimeCount
  13064.  move.l #0,NumTimes
  13065.  rts
  13066.  
  13067. STARTCOUNT:
  13068.  move.l d0,-(a7)
  13069.  move.l $dff004,d0
  13070.  and.l #$1ffff,d0
  13071.  move.l d0,oldtime
  13072.  st counting
  13073.  move.l (a7)+,d0
  13074.  rts
  13075.  
  13076. STOPCOUNT:
  13077.  move.l d0,-(a7)
  13078.  move.l $dff004,d0
  13079.  and.l #$1ffff,d0
  13080.  
  13081.  sub.l oldtime,d0
  13082.  cmp.l #-256,d0
  13083.  bge.s okcount
  13084.  add.l #313*256,d0
  13085. okcount:
  13086.  add.l d0,TimeCount
  13087.  addq.l #1,NumTimes
  13088.  clr.b counting
  13089.  move.l (a7)+,d0
  13090.  rts
  13091.  
  13092. STOPCOUNTNOADD:
  13093.  move.l d0,-(a7)
  13094.  move.l $dff004,d0
  13095.  and.l #$1ffff,d0
  13096.  
  13097.  sub.l oldtime,d0
  13098.  cmp.l #-256,d0
  13099.  bge.s okcount2
  13100.  add.l #313*256,d0
  13101. okcount2:
  13102.  add.l d0,TimeCount
  13103.  clr.b counting
  13104.  move.l (a7)+,d0
  13105.  rts
  13106.  
  13107. maxbot: dc.w 0
  13108. tstneg: dc.l 0
  13109.  
  13110. STOPTIMER:
  13111.  st oktodisplay
  13112.  rts
  13113.  
  13114. digits: incbin "numbers.inc"
  13115.  
  13116. COMPACTMAP: ds.l 257
  13117.  
  13118. BIGMAP: ds.l 256*10
  13119.  
  13120.  Section Sounds,CODE_C
  13121.  
  13122. nullcop:
  13123.  dc.w $106,$c40
  13124.  dc.w $180,0 
  13125.  dc.w $100,$0
  13126.  dc.w $ffff,$fffe
  13127.  
  13128. Scream:
  13129. ; incbin "ab3:sounds/Scream"
  13130. ; ds.w 100
  13131. EndScream:
  13132. LowScream:
  13133. ; incbin "ab3:sounds/LowScream"
  13134. ; ds.w 100
  13135. EndLowScream:
  13136. BaddieGun:
  13137. ; incbin "ab3:sounds/BaddieGun"
  13138. EndBaddieGun:
  13139. bass:
  13140. ; incbin "ab3:sounds/backbass+drum"
  13141. bassend:
  13142. Shoot:
  13143. ; incbin "ab3:sounds/fire!"
  13144. EndShoot:
  13145. Munch:
  13146. ; incbin "ab3:sounds/munch"
  13147. EndMunch:
  13148. PooGun:
  13149. ; incbin "ab3:sounds/shoot.dm"
  13150. EndPooGun:
  13151. Collect:
  13152. ; incbin "ab3:sounds/collect"
  13153. EndCollect:
  13154. DoorNoise:
  13155. ; incbin "ab3:sounds/newdoor"
  13156. EndDoorNoise:
  13157. Stomp:
  13158. ; incbin "ab3:sounds/footstep3"
  13159. EndStomp:
  13160. SwitchNoise:
  13161. ; incbin "ab3:sounds/switch"
  13162. EndSwitch:
  13163. Reload:
  13164. ; incbin "ab3:sounds/switch1.SFX"
  13165. EndReload:
  13166.  
  13167. CHEATFRAME:
  13168.  dc.b 26,20,33,27,17,12
  13169. ENDCHEAT:
  13170.  
  13171. NoAmmo:
  13172. ; incbin "ab3:sounds/noammo"
  13173. EndNoAmmo:
  13174. Splotch:
  13175. ; incbin "ab3:sounds/splotch"
  13176. EndSplotch:
  13177. SplatPop:
  13178. ; incbin "ab3:sounds/splatpop"
  13179. EndSplatPop:
  13180. Boom:
  13181. ; incbin "ab3:sounds/boom"
  13182. EndBoom:
  13183. Hiss:
  13184. ; incbin "ab3:sounds/newhiss"
  13185. EndHiss:
  13186. Howl1:
  13187. ; incbin "ab3:sounds/howl1"
  13188. EndHowl1:
  13189. Howl2:
  13190. ; incbin "ab3:sounds/howl2"
  13191. EndHowl2:
  13192. Pant:
  13193. ; incbin "ab3:sounds/pant"
  13194. EndPant:
  13195. Whoosh:
  13196. ; incbin "ab3:sounds/whoosh"
  13197. EndWhoosh:
  13198. ROAR:
  13199. ; incbin "ab3:sounds/bigscream"
  13200. EndROAR
  13201. whoosh:
  13202. ; incbin "ab3:sounds/flame"
  13203. Endwhoosh:
  13204.  SECTION music,code_c
  13205.  
  13206. UseAllChannels: dc.w 0
  13207.  
  13208. mt_init:
  13209.  
  13210.  
  13211.     move.l    mt_data,a0
  13212.     move.l    a0,a1
  13213.     add.l    #$3b8,a1
  13214.     moveq    #$7f,d0
  13215.     moveq    #0,d1
  13216. mt_loop:move.l    d1,d2
  13217.     subq.w    #1,d0
  13218. mt_lop2:move.b    (a1)+,d1
  13219.     cmp.b    d2,d1
  13220.     bgt.s    mt_loop
  13221.     dbf    d0,mt_lop2
  13222.     addq.b    #1,d2
  13223.  
  13224.     lea    mt_samplestarts(pc),a1
  13225.     asl.l    #8,d2
  13226.     asl.l    #2,d2
  13227.     add.l    #$43c,d2
  13228.     add.l    a0,d2
  13229.     move.l    d2,a2
  13230.     moveq    #$1e,d0
  13231. mt_lop3:
  13232.     clr.l    (a2)
  13233.     move.l    a2,(a1)+
  13234.     moveq    #0,d1
  13235.     move.w    42(a0),d1
  13236.     asl.l    #1,d1
  13237.     add.l    d1,a2
  13238.     add.l    #$1e,a0
  13239.     dbf    d0,mt_lop3
  13240.  
  13241.     or.b    #$2,$bfe001
  13242.     move.b    #$6,mt_speed
  13243.     clr.w    $dff0a8
  13244.     clr.w    $dff0b8
  13245.     clr.w    $dff0c8
  13246.     clr.w    $dff0d8
  13247.     clr.b    mt_songpos
  13248.     clr.b    mt_counter
  13249.     clr.w    mt_pattpos
  13250.     rts
  13251.  
  13252. mt_end:    clr.w    $dff0a8
  13253.     clr.w    $dff0b8
  13254.     clr.w    $dff0c8
  13255.     clr.w    $dff0d8
  13256.     move.w    #$f,$dff096
  13257.     rts
  13258.  
  13259. mt_music:
  13260.     movem.l    d0-d4/a0-a3/a5-a6,-(a7)
  13261.     move.l    mt_data,a0
  13262.     addq.b    #$1,mt_counter
  13263.     move.b    mt_counter,D0
  13264.     cmp.b    mt_speed,D0
  13265.     blt.s    mt_nonew
  13266.     clr.b    mt_counter
  13267.     bra    mt_getnew
  13268.  
  13269. mt_nonew:
  13270.     lea    mt_voice1(pc),a6
  13271.     lea    $dff0a0,a5
  13272.     bsr    mt_checkcom
  13273.     lea    mt_voice2(pc),a6
  13274.     lea    $dff0b0,a5
  13275.     bsr    mt_checkcom
  13276. ;    tst.b UseAllChannels
  13277. ;    beq mt_endr
  13278.      lea    mt_voice3(pc),a6
  13279.     lea    $dff0c0,a5
  13280.     bsr    mt_checkcom
  13281.     lea    mt_voice4(pc),a6
  13282.     lea    $dff0d0,a5
  13283.     bsr    mt_checkcom
  13284.     bra    mt_endr
  13285.  
  13286. mt_arpeggio:
  13287.     moveq    #0,d0
  13288.     move.b    mt_counter,d0
  13289.     divs    #$3,d0
  13290.     swap    d0
  13291.     cmp.w    #$0,d0
  13292.     beq.s    mt_arp2
  13293.     cmp.w    #$2,d0
  13294.     beq.s    mt_arp1
  13295.  
  13296.     moveq    #0,d0
  13297.     move.b    $3(a6),d0
  13298.     lsr.b    #4,d0
  13299.     bra.s    mt_arp3
  13300. mt_arp1:moveq    #0,d0
  13301.     move.b    $3(a6),d0
  13302.     and.b    #$f,d0
  13303.     bra.s    mt_arp3
  13304. mt_arp2:move.w    $10(a6),d2
  13305.     bra.s    mt_arp4
  13306. mt_arp3:asl.w    #1,d0
  13307.     moveq    #0,d1
  13308.     move.w    $10(a6),d1
  13309.     lea    mt_periods(pc),a0
  13310.     moveq    #$24,d7
  13311. mt_arploop:
  13312.     move.w    (a0,d0.w),d2
  13313.     cmp.w    (a0),d1
  13314.     bge.s    mt_arp4
  13315.     addq.l    #2,a0
  13316.     dbf    d7,mt_arploop
  13317.     rts
  13318. mt_arp4:move.w    d2,$6(a5)
  13319.     rts
  13320.  
  13321. mt_getnew:
  13322.     move.l    mt_data,a0
  13323.     move.l    a0,a3
  13324.     move.l    a0,a2
  13325.     add.l    #$c,a3
  13326.     add.l    #$3b8,a2
  13327.     add.l    #$43c,a0
  13328.  
  13329.     moveq    #0,d0
  13330.     move.l    d0,d1
  13331.     move.b    mt_songpos,d0
  13332.     move.b    (a2,d0.w),d1
  13333.     asl.l    #8,d1
  13334.     asl.l    #2,d1
  13335.     add.w    mt_pattpos,d1
  13336.     clr.w    mt_dmacon
  13337.  
  13338.     lea    $dff0a0,a5
  13339.     lea    mt_voice1(pc),a6
  13340.     bsr    mt_playvoice
  13341.     lea    $dff0b0,a5
  13342.     lea    mt_voice2(pc),a6
  13343.     bsr    mt_playvoice
  13344. ;    tst.b UseAllChannels
  13345. ;    beq mt_setdma
  13346.     lea    $dff0c0,a5
  13347.     lea    mt_voice3(pc),a6
  13348.     bsr    mt_playvoice
  13349.     lea    $dff0d0,a5
  13350.     lea    mt_voice4(pc),a6
  13351.     bsr    mt_playvoice
  13352.     bra    mt_setdma
  13353.  
  13354. PROTCALC:
  13355. ;    include "ab3:source_4000/protcalc.s"
  13356.     incbin "ab3:includes/protcalc.bin"
  13357. ENDPROTCALC:
  13358.  
  13359. mt_playvoice:
  13360.     move.l    (a0,d1.l),(a6)
  13361.     addq.l    #4,d1
  13362.     moveq    #0,d2
  13363.     move.b    $2(a6),d2
  13364.     and.b    #$f0,d2
  13365.     lsr.b    #4,d2
  13366.     move.b    (a6),d0
  13367.     and.b    #$f0,d0
  13368.     or.b    d0,d2
  13369.     tst.b    d2
  13370.     beq.s    mt_setregs
  13371.     moveq    #0,d3
  13372.     lea    mt_samplestarts(pc),a1
  13373.     move.l    d2,d4
  13374.     subq.l    #$1,d2
  13375.     asl.l    #2,d2
  13376.     mulu    #$1e,d4
  13377.     move.l    (a1,d2.l),$4(a6)
  13378.     move.w    (a3,d4.l),$8(a6)
  13379.     move.w    $2(a3,d4.l),$12(a6)
  13380.     move.w    $4(a3,d4.l),d3
  13381.     tst.w    d3
  13382.     beq.s    mt_noloop
  13383.     move.l    $4(a6),d2
  13384.     asl.w    #1,d3
  13385.     add.l    d3,d2
  13386.     move.l    d2,$a(a6)
  13387.     move.w    $4(a3,d4.l),d0
  13388.     add.w    $6(a3,d4.l),d0
  13389.     move.w    d0,8(a6)
  13390.     move.w    $6(a3,d4.l),$e(a6)
  13391.     move.w    $12(a6),d0
  13392.     asr.w #2,d0
  13393.     move.w d0,$8(a5)
  13394.     bra.s    mt_setregs
  13395. mt_noloop:
  13396.     move.l    $4(a6),d2
  13397.     add.l    d3,d2
  13398.     move.l    d2,$a(a6)
  13399.     move.w    $6(a3,d4.l),$e(a6)
  13400.     move.w    $12(a6),d0
  13401.     asr.w #2,d0
  13402.     move.w d0,$8(a5)
  13403. mt_setregs:
  13404.     move.w    (a6),d0
  13405.     and.w    #$fff,d0
  13406.     beq    mt_checkcom2
  13407.     move.b    $2(a6),d0
  13408.     and.b    #$F,d0
  13409.     cmp.b    #$3,d0
  13410.     bne.s    mt_setperiod
  13411.     bsr    mt_setmyport
  13412.     bra    mt_checkcom2
  13413. mt_setperiod:
  13414.     move.w    (a6),$10(a6)
  13415.     and.w    #$fff,$10(a6)
  13416.     move.w    $14(a6),d0
  13417.     move.w    d0,$dff096
  13418.     clr.b    $1b(a6)
  13419.  
  13420.     move.l    $4(a6),(a5)
  13421.     move.w    $8(a6),$4(a5)
  13422.     move.w    $10(a6),d0
  13423.     and.w    #$fff,d0
  13424.     move.w    d0,$6(a5)
  13425.     move.w    $14(a6),d0
  13426.     or.w    d0,mt_dmacon
  13427.     bra    mt_checkcom2
  13428.  
  13429. mt_setdma:
  13430.      move.w #250,d0
  13431. mt_wait:
  13432.      add.w #1,testchip
  13433.      dbra d0,mt_wait
  13434.     move.w    mt_dmacon,d0
  13435.     or.w    #$8000,d0
  13436.     and.w #%1111111111110011,d0
  13437.     move.w    d0,$dff096
  13438.     move.w #250,d0
  13439. mt_wait2:
  13440.     add.w #1,testchip
  13441.     dbra    d0,mt_wait2
  13442.     lea    $dff000,a5
  13443.     tst.b UseAllChannels
  13444.     beq.s noall
  13445.     lea    mt_voice4(pc),a6
  13446.     move.l    $a(a6),$d0(a5)
  13447.     move.w    $e(a6),$d4(a5)
  13448.     lea    mt_voice3(pc),a6
  13449.     move.l    $a(a6),$c0(a5)
  13450.     move.w    $e(a6),$c4(a5)
  13451. noall:
  13452.     lea    mt_voice2(pc),a6
  13453.     move.l    $a(a6),$b0(a5)
  13454.     move.w    $e(a6),$b4(a5)
  13455.     lea    mt_voice1(pc),a6
  13456.     move.l    $a(a6),$a0(a5)
  13457.     move.w    $e(a6),$a4(a5)
  13458.  
  13459.     add.w    #$10,mt_pattpos
  13460.     cmp.w    #$400,mt_pattpos
  13461.     bne.s    mt_endr
  13462. mt_nex:    clr.w    mt_pattpos
  13463.     clr.b    mt_break
  13464.     addq.b    #1,mt_songpos
  13465.     and.b    #$7f,mt_songpos
  13466.     move.b    mt_songpos,d1
  13467. ;    cmp.b    mt_data+$3b6,d1
  13468. ;    bne.s    mt_endr
  13469. ;    move.b    mt_data+$3b7,mt_songpos
  13470. mt_endr:tst.b    mt_break
  13471.     bne.s    mt_nex
  13472.     movem.l    (a7)+,d0-d4/a0-a3/a5-a6
  13473.     rts
  13474.  
  13475. mt_setmyport:
  13476.     move.w    (a6),d2
  13477.     and.w    #$fff,d2
  13478.     move.w    d2,$18(a6)
  13479.     move.w    $10(a6),d0
  13480.     clr.b    $16(a6)
  13481.     cmp.w    d0,d2
  13482.     beq.s    mt_clrport
  13483.     bge.s    mt_rt
  13484.     move.b    #$1,$16(a6)
  13485.     rts
  13486. mt_clrport:
  13487.     clr.w    $18(a6)
  13488. mt_rt:    rts
  13489.  
  13490. CODESTORE: dc.l 0
  13491.  
  13492. mt_myport:
  13493.     move.b    $3(a6),d0
  13494.     beq.s    mt_myslide
  13495.     move.b    d0,$17(a6)
  13496.     clr.b    $3(a6)
  13497. mt_myslide:
  13498.     tst.w    $18(a6)
  13499.     beq.s    mt_rt
  13500.     moveq    #0,d0
  13501.     move.b    $17(a6),d0
  13502.     tst.b    $16(a6)
  13503.     bne.s    mt_mysub
  13504.     add.w    d0,$10(a6)
  13505.     move.w    $18(a6),d0
  13506.     cmp.w    $10(a6),d0
  13507.     bgt.s    mt_myok
  13508.     move.w    $18(a6),$10(a6)
  13509.     clr.w    $18(a6)
  13510. mt_myok:move.w    $10(a6),$6(a5)
  13511.     rts
  13512. mt_mysub:
  13513.     sub.w    d0,$10(a6)
  13514.     move.w    $18(a6),d0
  13515.     cmp.w    $10(a6),d0
  13516.     blt.s    mt_myok
  13517.     move.w    $18(a6),$10(a6)
  13518.     clr.w    $18(a6)
  13519.     move.w    $10(a6),$6(a5)
  13520.     rts
  13521.  
  13522. mt_vib:    move.b    $3(a6),d0
  13523.     beq.s    mt_vi
  13524.     move.b    d0,$1a(a6)
  13525.  
  13526. mt_vi:    move.b    $1b(a6),d0
  13527.     lea    mt_sin(pc),a4
  13528.     lsr.w    #$2,d0
  13529.     and.w    #$1f,d0
  13530.     moveq    #0,d2
  13531.     move.b    (a4,d0.w),d2
  13532.     move.b    $1a(a6),d0
  13533.     and.w    #$f,d0
  13534.     mulu    d0,d2
  13535.     lsr.w    #$6,d2
  13536.     move.w    $10(a6),d0
  13537.     tst.b    $1b(a6)
  13538.     bmi.s    mt_vibmin
  13539.     add.w    d2,d0
  13540.     bra.s    mt_vib2
  13541. mt_vibmin:
  13542.     sub.w    d2,d0
  13543. mt_vib2:move.w    d0,$6(a5)
  13544.     move.b    $1a(a6),d0
  13545.     lsr.w    #$2,d0
  13546.     and.w    #$3c,d0
  13547.     add.b    d0,$1b(a6)
  13548.     rts
  13549.  
  13550. mt_nop:    move.w    $10(a6),$6(a5)
  13551.     rts
  13552.  
  13553.  
  13554. mt_checkcom:
  13555.     move.w    $2(a6),d0
  13556.     and.w    #$fff,d0
  13557.     beq.s    mt_nop
  13558.     move.b    $2(a6),d0
  13559.     and.b    #$f,d0
  13560.     tst.b    d0
  13561.     beq    mt_arpeggio
  13562.     cmp.b    #$1,d0
  13563.     beq.s    mt_portup
  13564.     cmp.b    #$2,d0
  13565.     beq    mt_portdown
  13566.     cmp.b    #$3,d0
  13567.     beq    mt_myport
  13568.     cmp.b    #$4,d0
  13569.     beq    mt_vib
  13570.     move.w    $10(a6),$6(a5)
  13571.     cmp.b    #$a,d0
  13572.     beq.s    mt_volslide
  13573.     rts
  13574.  
  13575. mt_volslide:
  13576.     moveq    #0,d0
  13577.     move.b    $3(a6),d0
  13578.     lsr.b    #4,d0
  13579.     tst.b    d0
  13580.     beq.s    mt_voldown
  13581.     add.w    d0,$12(a6)
  13582.     cmp.w    #$40,$12(a6)
  13583.     bmi.s    mt_vol2
  13584.     move.w    #$40,$12(a6)
  13585. mt_vol2:move.w    $12(a6),d0
  13586.     asr.w #2,d0
  13587.     move.w d0,$8(a5)
  13588.     rts
  13589.  
  13590. mt_voldown:
  13591.     moveq    #0,d0
  13592.     move.b    $3(a6),d0
  13593.     and.b    #$f,d0
  13594.     sub.w    d0,$12(a6)
  13595.     bpl.s    mt_vol3
  13596.     clr.w    $12(a6)
  13597. mt_vol3:move.w    $12(a6),d0
  13598.     asr.w #2,d0
  13599.     move.w d0,$8(a5)
  13600.     rts
  13601.  
  13602. mt_portup:
  13603.     moveq    #0,d0
  13604.     move.b    $3(a6),d0
  13605.     sub.w    d0,$10(a6)
  13606.     move.w    $10(a6),d0
  13607.     and.w    #$fff,d0
  13608.     cmp.w    #$71,d0
  13609.     bpl.s    mt_por2
  13610.     and.w    #$f000,$10(a6)
  13611.     or.w    #$71,$10(a6)
  13612. mt_por2:move.w    $10(a6),d0
  13613.     and.w    #$fff,d0
  13614.     move.w    d0,$6(a5)
  13615.     rts
  13616.  
  13617. mt_portdown:
  13618.     clr.w    d0
  13619.     move.b    $3(a6),d0
  13620.     add.w    d0,$10(a6)
  13621.     move.w    $10(a6),d0
  13622.     and.w    #$fff,d0
  13623.     cmp.w    #$358,d0
  13624.     bmi.s    mt_por3
  13625.     and.w    #$f000,$10(a6)
  13626.     or.w    #$358,$10(a6)
  13627. mt_por3:move.w    $10(a6),d0
  13628.     and.w    #$fff,d0
  13629.     move.w    d0,$6(a5)
  13630.     rts
  13631.  
  13632. mt_checkcom2:
  13633.     move.b    $2(a6),d0
  13634.     and.b    #$f,d0
  13635.     cmp.b    #$e,d0
  13636.     beq.s    mt_setfilt
  13637.     cmp.b    #$d,d0
  13638.     beq.s    mt_pattbreak
  13639.     cmp.b    #$b,d0
  13640.     beq.s    mt_posjmp
  13641.     cmp.b    #$c,d0
  13642.     beq.s    mt_setvol
  13643.     cmp.b    #$f,d0
  13644.     beq.s    mt_setspeed
  13645.     rts
  13646.  
  13647. mt_setfilt:
  13648.     move.b    $3(a6),d0
  13649.     and.b    #$1,d0
  13650.     asl.b    #$1,d0
  13651.     and.b    #$fd,$bfe001
  13652.     or.b    d0,$bfe001
  13653.     rts
  13654. mt_pattbreak:
  13655.     not.b    mt_break
  13656.     rts
  13657. mt_posjmp:
  13658.     st reachedend
  13659.     move.b    $3(a6),d0
  13660.     subq.b    #$1,d0
  13661.     move.b    d0,mt_songpos
  13662.     not.b    mt_break
  13663.     rts
  13664. mt_setvol:
  13665.     cmp.b    #$40,$3(a6)
  13666.     ble.s    mt_vol4
  13667.     move.b    #$40,$3(a6)
  13668. mt_vol4:move.b    $3(a6),d0
  13669.     asr.w #2,d0
  13670.     move.w d0,$8(a5)
  13671.     rts
  13672. mt_setspeed:
  13673.     cmp.b    #$1f,$3(a6)
  13674.     ble.s    mt_sets
  13675.     move.b    #$1f,$3(a6)
  13676. mt_sets:move.b    $3(a6),d0
  13677.     beq.s    mt_rts2
  13678.     move.b    d0,mt_speed
  13679.     clr.b    mt_counter
  13680. mt_rts2:rts
  13681.  
  13682. mt_sin:
  13683.  DC.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  13684.  DC.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  13685.  
  13686. mt_periods:
  13687.  DC.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  13688.  DC.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  13689.  DC.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  13690.  DC.w $007f,$0078,$0071,$0000,$0000
  13691.  
  13692. reachedend: dc.b 0
  13693. mt_speed:    DC.b    6
  13694. mt_songpos:    DC.b    0
  13695. mt_pattpos:    DC.w    0
  13696. mt_counter:    DC.b    0
  13697.  
  13698. mt_break:    DC.b    0
  13699. mt_dmacon:    DC.w    0
  13700. mt_samplestarts:DS.L    $1f
  13701. mt_voice1:    DS.w    10
  13702.         DC.w    1
  13703.         DS.w    3
  13704. mt_voice2:    DS.w    10
  13705.         DC.w    2
  13706.         DS.w    3
  13707. mt_voice3:    DS.w    10
  13708.         DC.w    4
  13709.         DS.w    3
  13710. mt_voice4:    DS.w    10
  13711.         DC.w    8
  13712.         DS.w    3
  13713.  
  13714. CHEATPTR: dc.l 0
  13715. CHEATNUM: dc.l 0
  13716.  
  13717. testchip: dc.w 0
  13718.  
  13719. ;/* End of File */
  13720. mt_data: dc.l 0
  13721. tstchip: dc.l 0
  13722.  include "SERIAL_NIGHTMARE"
  13723.  
  13724. ingame:
  13725. ; incbin "ab3:includes/ingame"
  13726. gameover: 
  13727. ;incbin "ab3:includes/gameover"
  13728. welldone: incbin "ab3:includes/newwelldone"
  13729.  
  13730.  
  13731.